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

标签 c++ winapi com ipc

我希望 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/

相关文章:

com - .NET 进程外 COM 对象在 API 调用中共享静态实例

.net - 将 .NET 对象公开为 COM - web.config 会发生什么情况

com - 如何: Call Managed C# Interface From Unmanaged C++ On WindowsCE Compact Framework

c++ - log4cpp 给出 `unresolved external` 错误

c++ - "objects map"在 opengl 中

python - Blosc 将错误导入 python

windows - Win32 : How to enumerate child processes?

c++ - 恒定大小数组的运行中位数

c# - WS_EX_NOACTIVATE 和 WinForms 的两个问题

c++ - 如何使用 Win32 以编程方式创建快捷方式