实现托管COM对象中定义的接口的托管客户端
我希望有一个托管com对象,它公开接受作为参数对象的方法来实现给定的接口。像这样的实现托管COM对象中定义的接口的托管客户端,com,Com,我希望有一个托管com对象,它公开接受作为参数对象的方法来实现给定的接口。像这样的 [ComVisible(true)] [Guid(".....")] class SomeClass { public void SomeMethod(ISomeInterface arg) ..... 显然,isomointerface也应该声明为ComVisible 现在我想在托管客户机中使用该COM对象,并在那里调用SomeMethod。问题是我需要实例化一个实现isomoInterface的对象。如果
[ComVisible(true)]
[Guid(".....")]
class SomeClass {
public void SomeMethod(ISomeInterface arg)
.....
显然,isomointerface
也应该声明为ComVisible
现在我想在托管客户机中使用该COM对象,并在那里调用SomeMethod
。问题是我需要实例化一个实现isomoInterface
的对象。如果这是一个本机COM对象,我会自动生成一个互操作程序集,这不会是一个问题。但无法为托管COM对象生成互操作程序集
我看到.NET4.0引入了类型等价的概念。看起来我可以使用ComImport
属性手动生成互操作。但这看起来是一项相当糟糕的工作。我想我也可以使用TypeIdentifierAttribute
,但是关于它的文档很模糊,上面说它主要是供编译器使用的
那么还有其他方法吗?这是反向的。让托管代码使用COM互操作是没有意义的,它应该简单地添加对程序集的引用并直接使用该类。使用此[ComVisible]类的本机代码应使用您使用Tlbexp.exe或Regasm.exe/tlb选项创建的类型库,以便使用正确的接口定义。类型等价很好地避免了PIA,这不是一个问题。我有一个相当复杂的部署场景,涉及将多个程序集合并到单个程序集。因此,向原始程序集添加引用并不是一件简单的事情。此外,我的托管COM对象很可能由使用早期版本的.NET framework的客户端实例化。所以直接引用不起作用。这些都不是阻止添加引用的原因。所以我可以有一个引用.NET 4.0程序集的.NET 3.5程序集?