6

ネイティブ C++ で F# コードを使用したいと考えています。より正確には、F# でいくつかのデータ構造を記述し、それを C++ コードで使用したいと考えています。

マネージ F# とアンマネージ C++ を混在させる方法がわかりません。接着層を作成するにはどうすればよいですか?

4

1 に答える 1

8

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#ライブラリから単一のメソッドを直接エクスポートして、基本的に混合コードアセンブリにすることもできます。

于 2013-03-02T23:06:57.823 に答える