Это, вероятно, глупый вопрос, и я не решался написать, но я новичок в 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()
..
}