我正在使用一些互操作代码,需要实例化一个接口。
C# 中的等价物是:
Interop.SomeInterface theInterface;
theInterface = new Interop.SomeInterface();
theInterface.SomeEvent += new SomeEventHandler(...);
如何在 F# 中完成对这个接口的实例化?我是否需要将此互操作 dll 重新包装成 F# 可以理解的东西?
我正在使用一些互操作代码,需要实例化一个接口。
C# 中的等价物是:
Interop.SomeInterface theInterface;
theInterface = new Interop.SomeInterface();
theInterface.SomeEvent += new SomeEventHandler(...);
如何在 F# 中完成对这个接口的实例化?我是否需要将此互操作 dll 重新包装成 F# 可以理解的东西?
实例化接口是不可能的。C# 编译器通过查找接口的实现者来实例化一个类。这是由编译器检查CoClassAttribute
.
据我所知,F# 对 . 什么一无所知CoClassAttribute
,因此您需要更改代码,以便它实例化一个实际的类,而不是一个接口。
您可以通过使用 Reflector、ILdasm 或任何其他元数据检查器查看 SomeInterface 上的 CoClassAttribute 来找出您需要的类。如果互操作包装器是使用 tlbimp 或 Visual Studio 生成的,则通常该类将按照约定命名为 SomeInterfaceClass。