ネイティブ C++ で F# コードを使用したいと考えています。より正確には、F# でいくつかのデータ構造を記述し、それを C++ コードで使用したいと考えています。
マネージ F# とアンマネージ C++ を混在させる方法がわかりません。接着層を作成するにはどうすればよいですか?
1 つの方法は、アセンブリを参照し、同時にネイティブ シンボルをエクスポートC++/CLI
できる混合モード アセンブリになるアセンブリを作成して、後でネイティブ C++ ライブラリで使用できるようにすることです。F#
このオプションは最も汎用性があります。この方法を使用して、双方向に機能する「ブリッジ」を作成できます。
これを行うときに私が好んで使用するアプローチの 1 つは (別のネイティブな c++/mfc アプリケーション内に C#、Wpf ベースの GUI を含めるためにこれを行いました)、次のような単純な C バインディングを作成することです。
//C++
void Method1() { Bridge::Method1(); }
void Method2(int param, int* nativeArray)
{
array<int>^ managedArray = marshalArray();
Bridge::Method2(param, managedArray);
}
....
//C#
static class Bridge
{
public static void Method1() { ... }
public static void Method2(int param, int[] ar) { ... }
}
これにより、基本的に、C++/CLI
ラッパーを可能な限り小さく保ち、コード全体をマネージド ライブラリに活用できるだけでなく、このライブラリを C から使用したり、.xml で動的にロードしたりすることもできますLoadLibrary()
。
ただし、これはやり過ぎだと言う人もいるかもしれません (ちょっとした配管コードを 2 回書きます)。
何かクレイジーなことをしたい場合は、F#
ライブラリから単一のメソッドを直接エクスポートして、基本的に混合コードアセンブリにすることもできます。