实例化Interop DLL的接口

时间:2012-12-07 17:19:58

标签: f#

我正在处理一些Interop代码,需要实例化一个接口。

C#中的等价物是:

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

如何在F#中实现此接口的实例化?我是否需要将此互操作dll重新包装成F#可以理解的内容?

1 个答案:

答案 0 :(得分:8)

实例化接口是不可能的。 The C# compiler is pulling a trick通过查找接口的实现者来实例化一个类。这是由编译器检查CoClassAttribute

完成的

据我所知,F#对CoClassAttribute一无所知,因此您需要更改代码,以便实例化实际的类,而不是接口。

通过使用Reflector,ILdasm或任何其他元数据检查器查看SomeInterface上的CoClassAttribute,您可以找出所需的类。如果使用tlbimp或visual studio生成interop包装器,通常按类型将该类命名为SomeInterfaceClass。