描述:
用ATL手动添加第二个IDispatch的时候,运行出现这样的错误:
error MIDL2337 : unsatisfied forward declaration : IFederate [ Coclass 'RTI' ]
Error executing midl.exe.
(其中IFederateAmbassdor是新增的接口名,RTI原来的接口名)
请问我是什么地方出了问题??
解决方案1:
我给你做了测试:
idl:
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(DD70A5F5-A411-459a-B54C-05F8CF56E791),
dual,
helpstring("IRTI1 Interface"),
pointer_default(unique)
]
interface IRTI1 : IDispatch //手动
{
};
[
object,
uuid(3F7E1AE7-FDC2-41D6-8AC6-F24BECCA3F44),
dual,
helpstring("IRTI Interface"),
pointer_default(unique)
]
interface IRTI : IDispatch
{
};
[
uuid(5F090D9A-8E8A-4EA7-AA92-2D7E03238146),
version(1.0),
helpstring("MuitInterface 1.0 Type Library")
]
library MUITINTERFACELib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(D096EC0F-CBB6-4286-B453-695B6E0FBD41),
helpstring("RTI Class")
]
coclass RTI
{
[default] interface IRTI;
interface IRTI1; //手动
};
};
.h:
// RTI.h : Declaration of the CRTI
#ifndef __RTI_H_
#define __RTI_H_
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// CRTI
class ATL_NO_VTABLE CRTI :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CRTI, &CLSID_RTI>,
public IDispatchImpl<IRTI, &IID_IRTI, &LIBID_MUITINTERFACELib>,
public IDispatchImpl<IRTI1, &IID_IRTI1, &LIBID_MUITINTERFACELib>//手动
{
public:
CRTI()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_RTI)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CRTI)
//COM_INTERFACE_ENTRY(IRTI) //手动
COM_INTERFACE_ENTRY2(IDispatch,IRTI) //手动
COM_INTERFACE_ENTRY(IRTI1) //手动
END_COM_MAP()
// IRTI
public:
};
#endif //__RTI_H_
没问题的!哈哈