0

我编写了一个 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 组件时,上述相同的客户端代码可以正常工作。

任何想法为什么会失败?

4

0 回答 0