2012-03-27 53 views
0

我正在創建一個需要與第三方工具(COM)互操作的wpf應用程序。該工具將首先啓動,我將在該工具中提供一些輸入。然後他將啓動我的wpf應用程序,在那裏再次輸入一些信息。我的wpf應用程序需要與正在運行的工具實例進行互操作,並在工具中執行一些方法並將結果提供給我的應用程序。我嘗試使用RCW。但RCW只是一個代理。我需要一個正在運行的工具實例來進行交互。任何人都可以幫助我嗎????????????.Net COM Interop運行COM實例並將其分配給RCW

編輯:有這樣的現有C++代碼,那麼如何將其轉換爲C#呢?

bool DisDriver::Create(CLSID clsid, DWORD ClsContext, LPCTSTR ServerName) 
{ 
    hRet = ::CoCreateInstanceEx(clsid,NULL,dwClsContext,strServerName==NULL?NULL:(&svrinfo),1,&multiqi); 

    if(hRet!=S_OK) { 
#ifdef XYDISPDRIVER_DEBUG 
     _tprintf(_T("CoCreateInstance failed:"),hRet); 
#endif 
     return false; 
    } 
    pDisp = (IDispatch*)(multiqi.pItf); 

} 
+0

查看運行對象表(ROT)。如果該工具沒有在ROT上註冊,那麼你運氣不好。 – Ben 2012-03-28 00:09:28

+0

嗨本,謝謝你的回覆。當我嘗試使用Marshal.getactiveobject(programid)時,它會拋出錯誤,而不是查看ROT中程序的活動對象並將其返回。那麼這是否意味着這個對象在ROT中不存在?或者它可能是其他原因? – kannan 2012-03-28 15:49:40

+0

另外我試圖枚舉通過所有運行的對象,我無法得到所需的對象 – kannan 2012-03-28 16:04:56

回答

0

Type.GetType(prog.id),Activator.CreateInstance(type)實際上會得到一個COM程序,它是需要一個針對此問題的正在運行的實例。