如何将F#代码与本地C++集成?

6

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

我不知道如何将托管的F#代码与非托管的C++代码混合使用。我该如何创建粘合层?


http://msdn.microsoft.com/en-gb/library/x0w2664k.aspx - Rob
2
@Rob 看起来更多是关于从托管代码使用非托管代码,而问题似乎是相反的。 - Some programmer dude
你可以从C++中运行F#代码,但是除非涉及COM,否则你必须在每种语言中重新编写数据结构。 - ildjarn
1个回答

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所述。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接