微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将标准C ++嵌入到.NET应用程序中

如何解决将标准C ++嵌入到.NET应用程序中

| 我想用独立于平台的标准C ++编写算法库。 然后可以使用相同的C ++代码并将其编译为.NET,以便C#应用程序可以使用该库吗? 如果没有,实现这种互操作的最简单方法是什么?     

解决方法

        您可以通过三种方式公开您的库,以便轻松地从托管代码中调用它们: 为它编写一个包含ѭ0的C ++ / CLI包装器-C#代码将调用此类的方法,这将调用您的库的本机方法 将库中的C样式函数作为DLL公开-C#代码将使用P / Invoke调用该函数 用C ++编写一个使用您的库的COM组件,并通过向其添加COM引用从C#代码中调用它。 第三个,COM,仅出于完整性考虑而包括在内。这不是我的第一选择。还是我的第三个。如果COM组件存在,那是一回事,为此专门编写它是另一回事。 在前两个之间,还有谁可以使用此库。如果C#代码是唯一使用它的代码,请执行所需的操作。但是例如,您可能有15或20个设置各种属性的本机方法,然后是执行实际工作的
go
execute
方法。因为托管本机互操作有一定的成本,所以我会告诉您编写一个带有20个参数的C ++ / CLI函数,先调用各种本机函数,然后再调用
go
execute
。这为您提供了一个更粗俗的界面,而不是闲聊,并降低了互操作成本。     ,        您不能直接在C#和标准C ++之间进行接口。但是,您可以在C ++ / CLI包装器中使用C ++库,从而使该功能在.NET托管代码(从而在C#)中可用。 只需将包装器编写为C./CLI库,即可公开.NET API并包含标准C ++库中的代码(但是,据我所知,这不能静态链接)。     ,        您可以使用pinvoke从任何.NET语言调用本机C / C ++库。这是MSDN的快速教程。您还可以在C ++中创建一个COM dll,您可以使用COM Interop在C#中直接引用它。除非您需要COM的优点,否则pinvoke是更容易的选择。 当然,正如Konrad所说,您可以使用托管C ++解决方案包装C ++ dll。 例如,请访问http://www.pinvoke.net/,以获取有关如何从C#调用win32 api的示例。 从上面的MSDN链接(根据下面的评论进行修改):
using System;
using System.Runtime.InteropServices;

class PlatformInvokeTest
{
    [DllImport(\"msvcrt.dll\",CallingConvention = CallingConvention.Cdecl)]
    public static extern int puts(
        [MarshalAs(UnmanagedType.LPStr)]
        string m);
    [DllImport(\"msvcrt.dll\",CallingConvention = CallingConvention.Cdecl)]
    internal static extern int _flushall();


    public static void Main() 
    {
        puts(\"Hello World!\");
        _flushall();
    }
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。