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