【发布时间】:2019-06-13 07:04:01
【问题描述】:
这可能是一个愚蠢的问题,我犹豫了一下,但我是 ATL 的新手。
我需要在我的代码中实现一个接口。我没有那个接口的 TLB 或 IDL,我只有一个头文件。
头文件定义接口如下:
EXTERN_C const IID IID_IExternalCon;
...
MIDL_INTERFACE("BCAC73A8-0226-4250-9D66-9656AA9BB86C")
IExternalCon: public IUnknown
{
public:
virtual HRESULT STDMETHODCALLTYPE GetName(
/* [in] */ __RPC__in ULONG *interface);
// ...
}
我需要实现它的多个实例。不幸的是,正在寻找我的接口的加载器没有找到我的这个接口的实现。
我做过这样的事情:
// is this a proper forward reference?
[
object,
uuid(BCAC73A8-0226-4250-9D66-9656AA9BB86C), // is this uuid supposed to match the one in the header?
dual,
nonextensible,
pointer_default(unique)
]
interface IExternalCon: IUnknown
{
};
library ... {
[
uuid(d543911a-81b0-4de1-9511-d1f14caceed)
]
// the class implementing my interface
coclass ExternalConTest
{
[default] interface IExternalCon;
};
}
任何有关仅基于头文件处理实现接口的帮助、提示或指导将不胜感激。
顺便说一下,我的类定义如下:
class ATL_NO_VTABLE CExternalConTest :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CExternalConTest, &CLSID_ExternalConTest>,
public IExternalCon
{
public:
...
BEGIN_COM_MAP(CExternalConTest)
COM_INTERFACE_ENTRY(IExternalCon)
COM_INTERFACE_ENTRY(IUnknown)
END_COM_MAP()
..
}
【问题讨论】: