簡體   English   中英

如何在2個進程之間共享COM對象?

[英]How to share COM objects between 2 processes?

我希望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創建工廠嗎? gh,好困惑...

為了跨進程或線程邊界使用COM,必須向COM告知您的接口,以便它可以在進程之間封送函數自變量/返回值。 最簡單的方法是使用系統中預定義的接口,例如IDispatch,但是如果要使用自己的接口,則必須注冊代理/存根DLL類型庫 如果您不這樣做,那么跨COM域的自定義接口對QueryInterface的調用將失敗,並顯示E_NOINTERFACE ,如您所見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM