在COM +中注册比Regsvr32暴露更少的接口

时间:2009-07-24 14:01:12

标签: com dcom

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

1 个答案:

答案 0 :(得分:1)

这个问题存在两个方面。

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

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

相关问题