2010-06-20 82 views
2

我想要Application1.exe实例化它的Item类的一个实例。
我希望Application2.exe在此对象上调用GetPrice()。
如何在两个进程之间共享COM对象?

我按照以下网站上的步骤1-7:
http://www.codeguru.com/Cpp/COM-Tech/activex/tutorials/article.php/c5567/

这是我到目前为止所。

应用1的主要如下所示:

CoInitialize(NULL); 

DWORD dwRegister; 
ItemFactory *pFactory = new ItemFactory; 
CoRegisterClassObject(CLSID_Item, pFactory, CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE, &dwRegister); 

_getch(); 
return 0; 

应用2的主要如下所示:

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创建工厂吗?呃,所以很困惑...

回答

1

为了跨进程或线程限制使用COM,您必须tell COM about your interfaces,因此它可以在进程之间编组您的函数参数/返回值。最简单的方法是使用系统中预定义的界面,例如IDispatch,但如果您要使用自己的界面,则必须使用register a proxy/stub DLLa type library。如果您不这样做,那么调用QueryInterface以跨越COM域的自定义接口将失败,并显示E_NOINTERFACE

相关问题