【发布时间】:2013-10-15 17:11:50
【问题描述】:
我正在编写一个 Excel RTD 服务器实现,但我被困在实现 IDispatch 的 coclass 的样板上。我无法访问 ATL,但我使用的是 ActiveQt,尽管我也对如何在原始 C 或 C++ 中执行此操作感兴趣。如何在 COM 服务器中正确实现IDispatch 方法?
文档一如既往地糟糕透顶。到目前为止我读过的内容:
- 最好是delegate the
IDispatchmethod calls to someITypeInfo。这是正确的吗? - 如果是这样,如何获得
ITypeInfo给我自己? LoadTypeLib() 和家人(接着看ITypeLib::GetTypeInfo())? - 如果不是,它是如何正确实施的?指向优质文档和独立示例的链接非常有用。
LoadTypeLib() 方法似乎适合 COM 客户端 获取某些库的类型信息,而不适合尝试自省的 COM 服务器。我说的对吗?
【问题讨论】:
-
通常,您通过向 Microsoft 支付 ATL 副本来实施 IDispatch。文档可以追溯到大约 1999 年,当时 ATL 不可用。现在,ATL 就是您的做法。时期。 (我已经实现了 IDispatch。我不推荐这种体验,它很辛苦,而且打字很多。)
-
@Ben:嗯,我同意你的观点,这可能是最便宜的方式。那些该死的巨魔技术。 (我撒谎了:我确实可以访问 ATL,但不能在我的工作站上,我只是想知道如果没有它我是否能过得去。但是,嘿,不要告诉任何人,好吗?)
-
我发现“内部 COM+ 基础服务”非常有用,“回到什么时候”——它有一个关于自动化的章节,其中涵盖了实现
IDispatch。 -
嘿,也许 Qt 有办法做到这一点。我对 Qt 了解多少?不是很多。
-
@GeorgFritzsche:太棒了,thrysoee.dk/InsideCOM+,谢谢。正如我所提到的,浏览
IDispatch部分给了我一个使用ITypeInfo和LoadTypeLib()的实现。 @Ben:恐怕 Qt 没有太多代码来处理这个问题。