有限定一个导入的COM接口的第三方的.Net组件,从另一个COM对象获取一个对象,并将其投射到导入的接口:如何将管理对象强制转换为COM接口?
[ComImport, Guid(...), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
private interface IMyInterface
{
//...
}
void SomeMethod(object obj)
{
IMyInterface iface = obj as IMyInterface ;
if (iface == null)
throw("Cannot get IMyInterface");
}
的方法是公共的,而导入的COM接口是内部的。我如何创建自己的实现该COM接口的托管对象?重新导入相同的接口在我的组装显而易见的解决方案不起作用:
[ComImport, Guid(...), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
private interface IMyInterface
{
//...
}
class MyClass : IMyInterface
{
}
SomeMethod(new MyClass());
尽管具有相同的GUID和被标记为一个COM接口,.NET运行时会将进口接口,2个不同的接口和不会将我的对象转换为另一个程序集中声明的接口。
我不能从第一个程序集中引用导入的接口,因为它没有被声明为公共的。我是否可以通过某种方式指示.Net运行时为我的托管对象创建一个RCW并隐藏实际的对象或者重写默认的投射行为?
我知道动态联编程序,但代码需要在.Net 2.0+上运行,所以很遗憾不是一个选项。
我回答了类似的问题[这里](http://stackoverflow.com/a/26796534/1768303)。我相信该解决方案应该适用于.NET 2.0+。 – Noseratio 2015-01-27 05:31:23