我希望Application1.exe实例化其Item类的实例
我希望Application2.exe在这个对象上调用GetPrice()。
我已按照以下网站上的步骤1-7进行操作:
http://www.codeguru.com/Cpp/COM-Tech/activex/tutorials/article.php/c5567/
这是我到目前为止所做的。
Application1的主要内容如下:
CoInitialize( NULL );
DWORD dwRegister;
ItemFactory *pFactory = new ItemFactory;
CoRegisterClassObject( CLSID_Item, pFactory, CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE, &dwRegister );
_getch();
return 0;
Application2的主要内容如下:
CoInitialize( NULL );
CoGetClassObject( CLSID_Item, CLSCTX_LOCAL_SERVER, NULL, IID_IItem, (LPVOID *)&pFactory );
我的问题(希望是我唯一的问题)是我不知道如何将我的Item类(或其接口,IItem)与CLSID_Item相关联;这只是我在另一个文件中定义的一些随机GUID。我试过了
CoRegisterPSClsid( IID_IItem, CLSID_Item );
在这一行之后,我尝试了
Item *pItem;
CoCreateInstance( CLSID_Item, NULL, CLSCTX_LOCAL_SERVER, IID_IItem, (LPVOID *)&pItem );
我收到E_NOINTERFACE错误 我应该用CoCreateInstance创建一个工厂吗?呃,很困惑......
答案 0 :(得分:1)
为了在进程或线程边界之间使用COM,您必须tell COM about your interfaces,这样它就可以封送您的函数参数/在进程之间返回值。最简单的方法是使用系统中预定义的接口,例如IDispatch,但如果您想使用自己的接口,则必须register a proxy/stub DLL或a type library。如果您不这样做,那么对于您在Q域中的自定义界面的QueryInterface调用将失败,E_NOINTERFACE
正如您所见。