有关如何将F#代码与本机C ++集成的任何想法?

时间:2013-03-02 23:00:34

标签: c++ .net f# managed

我想在本机C ++中使用一些F#代码。更准确地说,我想在F#中编写一些数据结构,然后在我的C ++代码中使用它们。

我不知道如何将托管F#与非托管C ++混合使用。如何创建胶水层?

1 个答案:

答案 0 :(得分:8)

一种方法是在C++/CLI中创建一个程序集,它将是混合模式程序集,可以引用您的F#程序集并同时导出本机符号,因此它们可以在本机c ++库中使用后来。此选项是最通用的。您可以使用此方法创建双向工作的“桥梁”。

我喜欢在我这样做时使用的一种方法(我已经这样做,包括C#,基于Wpf的GUI在另一个本地,c ++ / mfc应用程序中)是创建简单的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中所述