我编写了一个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组件时,上面的相同客户端代码工作正常。
为什么会失败的任何想法?