2013-03-02 53 views
6

我想在本機C++中使用一些F#代碼。更確切地說,我想在F#中編寫一些數據結構,然後在我的C++代碼中使用它們。有關如何將F#代碼與本機C++集成的任何想法?

我不知道如何將託管F#與非託管C++混合使用。我怎樣才能創建一個膠水層?

+0

http://msdn.microsoft描述。 com/en-gb/library/x0w2664k.aspx – Rob 2013-03-02 23:03:42

+2

@Rob這似乎更多地使用來自託管的非託管代碼,而問題是(在我看來)相反。 – 2013-03-02 23:06:16

+0

您可以從C++運行F#_code_,但必須在每種語言中重寫數據結構,除非涉及COM。 – ildjarn 2013-03-03 09:10:46

回答

7

一種方法是在C++/CLI中創建一個程序集,該程序集是混合模式程序集,可以引用您的F#程序集並同時導出本地符號,以便稍後可以在本機C++庫中使用它們。這個選項是最通用的。您可以使用此方法來創建雙向工作的「橋樑」。

一種方法,我喜歡我這樣做時使用(我已經這樣做了,包括C#,內另一個本地,C++/MFC應用程序基於WPF的圖形用戶界面)是創建簡單的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使用這個庫,甚至動態地LoadLibrary()加載它。儘管如此,有些人可能會說這是一種矯枉過正的行爲(你會寫一些管道代碼兩次)。

如果你想要做一些瘋狂你也可以F#庫直接嘗試和出口單從方法你,基本上使其成爲混合代碼組件,如第Simple method of dll export without C/CLI

相關問題