我一直在使用一个32位的COM库,通过向regsvr32注册它,一切工作正常。因为我需要从64位进程访问它,所以我现在通过组件服务管理工具将它注册为COM+。问题是,似乎并不是所有的COM接口都公开了。造成这种情况的原因可能是什么?
发布于 2009-07-26 10:07:24
这个问题有两个方面。
首先,通过仅将这些类添加到COM+应用程序中,手动控制通过COM+公开哪些类。您没有包含的类将在-proc中实例化,并且此实例化将失败,因为32位/64位不兼容。
然后是编组。为了给使用者一个新创建的对象的接口指针,COM+需要知道如何封送该接口。除非您在自己的系统上实现编组,否则将使用默认编组。只有满足以下要求时,默认封送处理才能起作用: COM服务器包含类型库,接口包含在该类型库中,并且接口完全与自动化兼容。后者大体上意味着该接口的方法都没有像struct这样的自定义类型的参数(接口是可以的)。如果不满足这些要求,COM+将在使用者调用CoCreateInstance()或IUnknown::QueryInterface()时返回E_NOINTERFACE。请看这个类似的问题:What is required to enable marshaling for a COM interface?你基本上有三个选择:不查询违规的接口,实现自定义编组(我目前不知道从哪里开始),或者引入一个新的与自动化兼容的中间接口。
https://stackoverflow.com/questions/1177877
复制相似问题