[英]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.