gpt4 book ai didi

c++ - 如何在 2 个进程之间共享 COM 对象?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:39 24 4
gpt4 key购买 nike

我希望 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 类(或其接口(interface),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 创建工厂吗?呃,好迷茫……

最佳答案

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

关于c++ - 如何在 2 个进程之间共享 COM 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3078146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com