6

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

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

4

1 回答 1

8

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

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

于 2013-03-02T23:06:57.823 回答