2013-03-02 5 views
6

ネイティブC++でF#コードを使用したいと思います。より正確には、私はF#でいくつかのデータ構造を書いて、それを私のC++コードで使いたいと思っています。F#コードとネイティブC++を統合する方法はありますか?

管理対象F#とアンマネージC++をどのように混在させることはできません。グルー層を作成するにはどうしたらいいですか?

+0

http://msdn.microsoftで説明したように、基本的に、混合コードアセンブリ作り、直接あなたからF#ライブラリの単一の方法を試してみて、輸出することができます。 com/ja-gb/library/x0w2664k.aspx – Rob

+2

@Robこれは、マネージドからアンマネージコードを使用する方法の方が多いようですが、質問は(私にとっては)そうではないようです。 –

+0

C++からF#_code_を実行できますが、COMを使用しない限り、各言語で書き直す必要があります。 – ildjarn

答えて

7

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

関連する問題