2

我一直在使用 32 位 COM 库,通过 regsvr32 注册它,一切正常。因为我需要从 64 位进程访问它,所以我现在通过组件服务管理工具将它注册为 COM+。问题是,似乎并不是所有的 COM 接口都被暴露了。这可能是什么原因?

4

1 回答 1

1

这个问题有两个方面。

首先,您可以通过仅将这些类添加到 COM+ 应用程序中来手动控制通过 COM+ 公开哪些类。您不包含的类将在进程内实例化,并且由于 32 位/64 位不兼容,此实例化将失败。

然后是编组。为了给消费者一个新创建对象的接口指针,COM+ 需要知道如何编组该接口。除非您在自己的默认编组上实现编组,否则使用默认编组。仅当满足以下要求时,默认编组才会起作用:COM 服务器包含类型库,接口包含在该类型库中,并且接口完全兼容自动化。后者大致意味着该接口的方法都没有自定义类型的参数,例如结构(接口可以)。如果不满足这些要求,COM+ 将在消费者调用 CoCreateInstance() 或 IUnknown::QueryInterface() 时返回 E_NOINTERFACE。请参阅这个类似的问题:为 COM 接口启用编组需要什么?您基本上有三个选择:不查询违规接口,实现自定义编组(我目前不知道从哪里开始)或引入与自动化兼容的新中间接口。

于 2009-07-26T10:07:24.187 回答