IDispatch 从 COM 服务器返回 NULL 到客户端(客户端和服务器都在 C++ 中)
Posted
技术标签:
【中文标题】IDispatch 从 COM 服务器返回 NULL 到客户端(客户端和服务器都在 C++ 中)【英文标题】:IDispatch returned NULL from a COM server to a client (Client & Server both in 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 我们没有得到任何关于失败的信息。 【参考方案1】:问题已解决我没有在 idl 文件中为参数 IDispatch 使用关键字 [out, retval]。将其放入接口方法后。 COM 服务器已成功将 IDispatch 值返回给客户端。
【讨论】:
以上是关于IDispatch 从 COM 服务器返回 NULL 到客户端(客户端和服务器都在 C++ 中)的主要内容,如果未能解决你的问题,请参考以下文章
IDispatch::Invoke(DISPATCH_PROPERTYGET) 是不是会增加返回的 IDispatch 接口上的引用计数?
创建 IDispatch .NET COM 类,其中内容仅在运行时可用
使用 IDispatch 的 C++ 和 COM 的类似动态的替代方案