我有一个最初用 Visual Studio 6 编写的 COM 组件。它位于我的一台开发机器上运行的 Windows 服务中。我已经编写了一个快速的 MFC 测试应用程序来调用它,当从这台机器上运行时它工作正常,代码看起来像
COSERVERINFO si;
MULTI_QI qi;
COAUTHINFO cai = { RPC_C_AUTHN_NONE, RPC_C_AUTHZ_NONE, 0,RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IMPERSONATE,0, EOAC_NONE };
si.dwReserved1 = 0;
si.pwszName =L"{machine name}";
si.pAuthInfo = &cai;
si.dwReserved2 = 0;
qi.pIID = &IID_IMyComponent;
qi.pItf = NULL;
qi.hr = 1;
HRESULT hr = CoCreateInstanceEx(CLSID_MyComponent,NULL,CLSCTX_REMOTE_SERVER ,&si,1,&qi);
但是,当我将 MFC 测试应用程序移动到我的另一台开发机器并尝试调用另一台机器上的组件时,它失败了。从 CoCreateInstanceEx 返回的 hresult 是 -2147024891
我已经创建了代理存根 DLL 并在两台机器上注册了它。我还缺少其他东西吗?
更新:我现在将 COUTHINFO 结构更新到下面并且它可以工作。
COAUTHINFO cai = { RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, 0, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE,0, EOAC_NONE };