【问题标题】:IDispatch returned NULL from a COM server to a client (Client & Server both in C++ )IDispatch 从 COM 服务器返回 NULL 到客户端(客户端和服务器都在 C++ 中)
【发布时间】:2012-06-22 09:33:09
【问题描述】:

我有一个作为 .exe 运行的 com 服务器。这个 COM 服务器有两个 COM 实现。 COM1 中有接口说“interface1”,COM2 有“interface2”。在“interface1”的一种方法中,比如 XYZ(IDispatch **pIDispatch),我使用“CoGetClassObject()”和“CLSCTX_LOCAL_SERVER”实例化了 COM2,并创建了“interface2”并通过该方法传递了它的“IDispatch”指针。

同一台机器上的客户端使用 COM Proxy DLL 与 COM Server 通信。客户端调用“interface1”方法XYZ(),函数执​​行成功,但返回给客户端的IDispatch为NULL。

机器是32位的。

谁能告诉我为什么会这样,或者我想要得到的东西是不可能的。

【问题讨论】:

  • 大概你正在使用进程外来桥接 32/64 位鸿沟?
  • 是的 32 位客户端正在使用代理 DLL 与 64 位 COM 服务器通信
  • 看起来您忽略了调用的 HRESULT 返回值。不要,你不会知道它为什么会失败。
  • 感谢您指出 HRESULT 返回值。 HRESULT 返回 S_OK 所以从 HRESULT 我们没有得到任何关于失败的信息。

标签: c++ com


【解决方案1】:

问题已解决我没有在 idl 文件中为参数 IDispatch 使用关键字 [out, retval]。将其放入接口方法后。 COM 服务器已成功将 IDispatch 值返回给客户端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多