6
我想在本機C++中使用一些F#代碼。更確切地說,我想在F#中編寫一些數據結構,然後在我的C++代碼中使用它們。有關如何將F#代碼與本機C++集成的任何想法?
我不知道如何將託管F#與非託管C++混合使用。我怎樣才能創建一個膠水層?
我想在本機C++中使用一些F#代碼。更確切地說,我想在F#中編寫一些數據結構,然後在我的C++代碼中使用它們。有關如何將F#代碼與本機C++集成的任何想法?
我不知道如何將託管F#與非託管C++混合使用。我怎樣才能創建一個膠水層?
一種方法是在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
http://msdn.microsoft描述。 com/en-gb/library/x0w2664k.aspx – Rob 2013-03-02 23:03:42
@Rob這似乎更多地使用來自託管的非託管代碼,而問題是(在我看來)相反。 – 2013-03-02 23:06:16
您可以從C++運行F#_code_,但必須在每種語言中重寫數據結構,除非涉及COM。 – ildjarn 2013-03-03 09:10:46