3

相互運用コードを使用していて、インターフェイスをインスタンス化する必要があります。

C# での等価物は次のとおりです。

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

F# でこのインターフェイスをインスタンス化するにはどうすればよいですか? この相互運用 DLL を F# が理解できるものに再ラップする必要がありますか?

4

1 に答える 1

8

インターフェイスをインスタンス化することはできません。C# コンパイラは、インターフェイスの実装者を検索してクラスをインスタンス化するというトリックを実行しています。これは、コンパイラがCoClassAttribute.

私の知る限り、F# は について何も知らないCoClassAttributeので、インターフェイスではなく実際のクラスをインスタンス化するようにコードを変更する必要があります。

SomeInterface の CoClassAttribute を Reflector、ILdasm、またはその他のメタデータ インスペクターで調べることで、必要なクラスを特定できます。相互運用ラッパーが tlbimp または Visual Studio を使用して生成された場合、通常、クラスは慣例により SomeInterfaceClass という名前になります。

于 2012-12-07T17:31:03.353 に答える