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