在COM+上注册;公开的接口少于Regsvr32

在COM+上注册;公开的接口少于Regsvr32,com,dcom,Com,Dcom,我一直在使用一个32位COM库,通过向regsvr32注册它,一切正常。因为我需要从64位进程访问它,所以我现在通过组件服务管理工具将它注册为COM+。问题是,似乎并不是所有的COM接口都公开了。原因可能是什么?这个问题有两个方面 首先,通过仅将这些类添加到COM+应用程序中,手动控制通过COM+公开的类。不包括的类将在proc中实例化,由于32位/64位不兼容,此实例化将失败 然后是编组。为了给使用者一个新创建对象的接口指针,COM+需要知道如何封送该接口。除非您自己实现编组,否则将使用默认编

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

这个问题有两个方面

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

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