加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:36:24 所属栏目:百科 来源:网络整理
导读:我想在本机C中使用一些F#代码.更确切地说,我想在F#中编写一些数据结构,然后在我的C代码中使用它们. 我不知道如何将托管F#与非托管C混合使用.如何创建胶水层? 解决方法 一种方法是在C/C++LI中创建一个程序集,它将是混合模式程序集,可以引用您的F#程序集并同
我想在本机C中使用一些F#代码.更确切地说,我想在F#中编写一些数据结构,然后在我的C代码中使用它们.

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

解决方法

一种方法是在C/C++LI中创建一个程序集,它将是混合模式程序集,可以引用您的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/C++LI包装器尽可能小,利用整个代码到托管库,以及允许您从C使用此库,甚至使用LoadLibrary()动态加载它.

有些人可能会说这是一种矫枉过正(你确实写了一些管道代码两次).

如果你想做一些疯狂的事情你也可以尝试直接从你的F#库导出单个方法,基本上使它成为一个混合代码程序集,如文章Simple method of dll export without C/CLI所述

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读