有限定一個導入的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