如何将F#代码与本机C+集成+;? 我想在本地C++中使用一些F.*代码。更确切地说,我想在F中写一些数据结构,然后用它们在我的C++代码中使用。 我不知道如何将托管F~()与非托管C++混合。如何创建一个胶层? < p>一种方法是在代码> C++ +CLI中创建一个程序集,它是混合模式程序集,可以同时引用您的 f > /Cuff>组件并输出本地符号,以便以后可以在本机C++库中使用。此选项是最通用的。您可以使用此方法创建双向工作的“桥梁”

如何将F#代码与本机C+集成+;? 我想在本地C++中使用一些F.*代码。更确切地说,我想在F中写一些数据结构,然后用它们在我的C++代码中使用。 我不知道如何将托管F~()与非托管C++混合。如何创建一个胶层? < p>一种方法是在代码> C++ +CLI中创建一个程序集,它是混合模式程序集,可以同时引用您的 f > /Cuff>组件并输出本地符号,以便以后可以在本机C++库中使用。此选项是最通用的。您可以使用此方法创建双向工作的“桥梁”,c++,.net,f#,managed,C++,.net,F#,Managed,当我这样做时,我喜欢使用的一种方法(我这样做是为了在另一个本机C++/mfc应用程序中包含基于C#的Wpf GUI)是创建简单的C绑定,如下所示: //C++ void Method1() { Bridge::Method1(); } void Method2(int param, int* nativeArray) { array<int>^ managedArray = marshalArray(); Bridge::Method2(param, manage

当我这样做时,我喜欢使用的一种方法(我这样做是为了在另一个本机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++
void Method1(){Bridge::Method1();}
void方法2(int参数,int*nativeArray)
{ 
数组^managedArray=marshalArray();
桥接器::方法2(参数,managedArray);
}
....
//C#
静态类桥
{
公共静态void Method1(){…}
公共静态void方法2(int参数,int[]ar){…}
}
这基本上允许您使
C++/CLI
包装器尽可能小,利用整个代码到托管库,并允许您从C使用此库,甚至使用
LoadLibrary()
动态加载它

不过,有些人可能会说这是一种过激行为(您确实编写了一些管道代码两次)


如果您想做一些疯狂的事情,您也可以尝试直接从
F#
库导出单个方法,基本上使它成为一个混合代码程序集,如文章@Rob中所述,这似乎更多地是关于从托管中使用非托管代码,而问题是(在我看来)另一种方法是,可以从C++运行f*代码,但是必须使用每种语言重写数据结构,除非涉及COM。