gpt4 book ai didi

windows - 为 COM 接口(interface)启用编码(marshal)处理需要什么?

转载 作者:可可西里 更新时间:2023-11-01 09:22:33 24 4
gpt4 key购买 nike

我有一个没有类型库的 32 位 ATL COM 组件。它有一个类工厂,用于一个实现多个接口(interface)的给定类。

当我将它用作进程内服务器时,一切正常 - 客户端调用 CoCreateInstance(),对象被实例化,QueryInterface() 检索指向所请求接口(interface)的指针。但是,当我将组件放入 COM+ 时,我无法再实例化该类 - CoCreateInstance() 现在返回 E_NOINTERFACE。

我认为问题在于 COM+ 无法执行编码(marshal)处理,因为缺少类型库 - 它不知道如何执行。我需要生成并注册一个类型库来解决这个问题还是有其他方法?

最佳答案

类型库是支持编码的一种方式,代理/ stub DLL(从 IDL 生成)是另一种方式。然而,在这两种情况下,您都首先需要 IDL。

如果 Microsoft 没有为此接口(interface)提供类型库/代理 DLL 或 IDL,很可能是有原因的:也许接口(interface)使用不可编码的数据结构,需要将函数指针作为方法参数或其他东西传递像这样?如果是这种情况,就没有办法让这个接口(interface)为 DCOM 工作。

也许您可以重建 IDL,但很有可能,它只是不可行。那么您最后的回退可能是使用自定义或处理程序编码,但这可能不值得付出努力。也就是说,我建议考虑其他不涉及使用 DCOM 接口(interface)的路由,这些接口(interface)并非设计用于 DCOM。

关于windows - 为 COM 接口(interface)启用编码(marshal)处理需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/852497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com