c++ - 从 MFC 客户端调用远程 COM 组件?

标签 c++ com mfc dcom

我有一个 COM 组件,它最初是用 Visual Studio 6 编写的。它位于我在我的一台开发机器上运行的 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

我已经创建了代理 stub 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 };

最佳答案

ERROR_ACCESS_DENIED 很可能是由于 COAUTHINFO 提供的参数错误。您将身份验证、授权级别设置为无,这不足以获得连接远程计算机的权限。尝试设置这些值:RPC_C_AUTHN_DEFAULT(让 COM 协商最佳身份验证服务)、RPC_C_AUTHZ_NONE、RPC_C_AUTHN_LEVEL_DEFAULT、RPC_C_IMP_LEVEL_IMPERSONATE。另请参阅 MSDN 源 - COAUTHINFO structure

关于c++ - 从 MFC 客户端调用远程 COM 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11313993/

相关文章:

mfc - 如何默认激活 "disable display scaling on high dpi settings"

c++ - 什么可能导致相同的 SSE 代码在相同的函数中运行速度慢几倍?

C++20 协程。当调用yield时,检索到空值

c++ - 64 位系统的预定义宏

c# - 如何检查 COM dll 是否已在 C# 中注册

windows - 实现 IUnknown、未解析的外部符号

c++ - TranslateColors() RGB 和 CMYK 的颜色范围

c++ - header 包含顺序困惑

c++ 中的 C# COM 互操作

c++ - 以编程方式更改 Windows Mobile 6.1 主题