2012-12-07 68 views
3

我正在使用一些Interop代碼,並需要實例化一個接口。Interop DLL的實例化接口

C#中的等價物是:

Interop.SomeInterface theInterface; 
theInterface = new Interop.SomeInterface(); 
theInterface.SomeEvent += new SomeEventHandler(...); 

我怎樣才能做到在實例F#這個界面?我是否需要將這個interop dll重新包裝成F#可以理解的東西?

回答

8

不可能實例化一個接口。 The C# compiler is pulling a trick通過查找接口的實現者來實例化一個類。這是由編譯器檢查CoClassAttribute完成的。

據我所知,F#對於CoClassAttribute一無所知,所以你需要改變你的代碼,以便它實例化一個實際的類,而不是一個接口。

您可以通過查看具有反射器,ILdasm或任何其他元數據檢查器的SomeInterface上的CoClassAttribute來找出需要的類。如果interop包裝是使用tlbimp或visual studio生成的,通常該類將按照慣例命名爲SomeInterfaceClass。

+0

這是現貨。謝謝! – Dave