远程从非托管C ++调用C#COM组件?

时间:2012-07-11 08:36:19

标签: c# c++ .net dcom

我编写了一个C#.NET COM组件,然后从C#前端调用它。但是,它也需要使用旧的Visual C ++ 6客户端应用程序。当它全部安装在同一台机器上但我需要远程调用它时工作正常。如果没有注册类错误,则会失败。安装组件的服务器是Windows 7 64位机器,如果有任何不同,客户端是32位XP。因为我的代码非常复杂,我在互联网上找到了一个简单的例子。它与我的代码基本相同,但以完全相同的方式失败。这个例子在这里:

http://www.codeproject.com/Articles/12673/Calling-Managed-NET-C-COM-Objects-from-Unmanaged-C

该示例客户端在同一台计算机上正常运行。我将客户端代码更改为此(远程运行):

CoInitialize(NULL);

COSERVERINFO si; 
MULTI_QI qi; 
COAUTHINFO cai = { RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, 0, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE,0, EOAC_NONE };
si.dwReserved1 = 0; 
si.pwszName =L"{machine name}"; 
si.pAuthInfo = &cai; 
si.dwReserved2 = 0; 

qi.pIID = &MyInterop::IID_IMyDotNetInterface; 
qi.pItf = NULL;
qi.hr = 1; 

HRESULT hr = CoCreateInstanceEx(MyInterop::CLSID_MyDotNetClass,NULL,CLSCTX_REMOTE_SERVER ,&si,1,&qi);//CLSCTX_SERVER

if (SUCCEEDED(hr))
{
    MyInterop::IMyDotNetInterfacePtr* pCom = new MyInterop::IMyDotNetInterfacePtr;

    pCom->Attach((MyInterop::IMyDotNetInterface*)qi.pItf);


    HRESULT hRes = (*pCom)->ShowCOMDialog();

    delete pCom;

}

CoUninitialize();

但是,它在CoCreateInstanceEx上失败,HRESULT为0x80040154(未注册类)。当远程调用用Visual C ++ 6编写的COM组件时,上面的相同客户端代码工作正常。

为什么会失败的任何想法?

0 个答案:

没有答案