在實施從我的類引發的事件的連接點,我宣佈我的IDL一個dispinterface
像這樣ATL/COM:MIDL編譯器不會輸出UUID的調度接口
[
uuid(123-MY-GENERATED-GUID)
]
dispinterface _IMyChangeEvents {
properties:
methods:
[id(1)] void ItemChanged([in] BSTR changeInformation);
};
根據一些消息來源,包括書「ATL內部」,這應該產生一個DIID__IMyChangeEvents
,然後我可以用它從ATL::IConnectionPointImpl<ImplClass, IID>
派生我的課程。但是,它也沒有,也不能在CONNECTION_POINT_ENTRY
宏中使用__uuidof(_IMyChangeEvents)
,如文檔中所述,因爲它抱怨「沒有GUID與此對象關聯」。
什麼是正確的實現方式?
該代碼片段看起來不錯,問題在其他地方:IDL未編譯,您不包括從IDL生成的C++文件等。 –
我嘗試刪除生成的頭文件,並在構建項目時重新生成頭文件。但它只包含一個前向聲明,MIDL_INTERFACE和DECLSPEC_UUID都不包含。還有其他來自該文件的接口被發現很好,關於此接口缺少GUID的投訴是唯一留下的錯誤。 –
由於上面的短代碼片段看起來不錯,因此您可以讓我們猜測實際問題出在哪裏。例如,您可能想要在線查看示例,或者查看我的[VbsEvents](http://www.alax.info/trac/public/browser/trunk/Utilities/VbsEvents/)。您將會看到['_IFooEvents'](http://www.alax.info/trac/public/browser/trunk/Utilities/VbsEvents/VbsEvents.idl#L31)會在['_IFooEvents']上生成啓用UUID的'DIID__IFooEvents'。 VbsEvents_i.c'](http://www.alax.info/trac/public/browser/trunk/Utilities/VbsEvents/VbsEvents_i.c#L76),然後由C++代碼包含,特別是通過__uuidof(。 ..)'。 –