实例化Interop DLL的接口

Dav*_*ave 3 f#

我正在使用一些Interop代码,需要实例化一个接口.

C#中的等价物是:

Interop.SomeInterface theInterface;
theInterface = new Interop.SomeInterface();
theInterface.SomeEvent += new SomeEventHandler(...);
Run Code Online (Sandbox Code Playgroud)

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

vcs*_*nes 8

实例化接口是不可能的.C#编译器通过查找接口的实现者来实例化一个类.这是由编译器检查完成的CoClassAttribute.

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

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