ネイティブC++でF#コードを使用したいと思います。より正確には、私はF#でいくつかのデータ構造を書いて、それを私のC++コードで使いたいと思っています。F#コードとネイティブC++を統合する方法はありますか?
管理対象F#とアンマネージC++をどのように混在させることはできません。グルー層を作成するにはどうしたらいいですか?
ネイティブC++でF#コードを使用したいと思います。より正確には、私はF#でいくつかのデータ構造を書いて、それを私のC++コードで使いたいと思っています。F#コードとネイティブC++を統合する方法はありますか?
管理対象F#とアンマネージC++をどのように混在させることはできません。グルー層を作成するにはどうしたらいいですか?
C++/CLI
でアセンブリーを作成する方法もあります。これは、F#
アセンブリを参照してネイティブシンボルを同時にエクスポートできる混合モードアセンブリであり、後でネイティブC++ライブラリで使用することができます。このオプションは最も汎用性があります。この方法を使用して、両方の方法で動作する「ブリッジ」を作成できます。このように、簡単なC-バインディングを作成するためにされて、私はこれを行うとき、私は好き
一つのアプローチは、使用する(と私は別のネイティブ、C++/MFCアプリケーション内部のC#、WPFベースのGUIが含まれるようにこれをやった):
//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
ラッパーを可能な限り小さく保ち、マネージライブラリーにコード全体を利用するだけでなく、LoadLibrary()
でこのライブラリーを使用することもできます。
これは過度だと言えるかもしれませんが(配管コードを2回書く)
あなたが狂った何かをしたい場合も記事Simple method of dll export without C/CLI
http://msdn.microsoftで説明したように、基本的に、混合コードアセンブリ作り、直接あなたから
F#
ライブラリの単一の方法を試してみて、輸出することができます。 com/ja-gb/library/x0w2664k.aspx – Rob@Robこれは、マネージドからアンマネージコードを使用する方法の方が多いようですが、質問は(私にとっては)そうではないようです。 –
C++からF#_code_を実行できますが、COMを使用しない限り、各言語で書き直す必要があります。 – ildjarn