3

我正在使用一些互操作代码,需要实例化一个接口。

C# 中的等价物是:

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

如何在 F# 中完成对这个接口的实例化?我是否需要将此互操作 dll 重新包装成 F# 可以理解的东西?

4

1 回答 1

8

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

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

您可以通过使用 Reflector、ILdasm 或任何其他元数据检查器查看 SomeInterface 上的 CoClassAttribute 来找出您需要的类。如果互操作包装器是使用 tlbimp 或 Visual Studio 生成的,则通常该类将按照约定命名为 SomeInterfaceClass。

于 2012-12-07T17:31:03.353 回答