2012-03-27 128 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程序,它是需要一个针对此问题的正在运行的实例。