21xrx.com
2024-12-27 04:46:52 Friday
登录
文章检索 我的文章 写文章
C# 调用 C++ DLL
2023-07-05 20:26:08 深夜i     --     --
C# C++ DLL Interop P/Invoke

在开发中,我们常常需要将 C# 与 C++ 结合起来使用。这两种语言各有优势,特别是 C++ 语言的高效性和底层控制能力,使得它在很多情况下是不可替代的。

为了可以在 C# 中使用 C++ 的功能,我们可以通过编写一个动态链接库(DLL)的方式,将 C++ 的代码打包成一个库文件,然后在 C# 代码中通过“DllImport”操作进行调用。

C++编写 DLL 的步骤:

1.在 C++ 中编写需要封装的函数。

2.将这些函数打包成一个动态链接库,使用 __declspec(dllexport) 修饰符将这些函数声明为导出函数,以支持在 C# 中使用。

3.将生成的 DLL 文件放置到 C# 程序可以访问的路径中。

C# 中调用 C++ DLL:

1.在 C# 代码中声明需要调用 DLL 中的函数, 使用“DllImport”来引用 DLL 中的函数。

2.调用 DLL 中的函数即可, 与直接调用 C# 中的函数类似。

下面是一个简单的例子:

C++ 代码:

 cpp

#include <stdio.h>

#ifdef STATICLIBRARY_EXPORTS

#define STATICLIBRARY_API __declspec(dllexport)

#else

#define STATICLIBRARY_API __declspec(dllimport)

#endif

extern "C" STATICLIBRARY_API int Add(int a, int b)

{

  return a + b;

}

以静态库导出的形式将 Add 函数暴露给外界,可供其他程序调用。

C# 代码:

 csharp

using System.Runtime.InteropServices;

namespace CSharpCallCpp

{

  class Program

  {

    [DllImport("StaticLibrary.dll", EntryPoint = "Add")]

    public static extern int Add(int a, int b);

    static void Main(string[] args)

    {

      int c = Add(2, 3);

      System.Console.WriteLine(c); // 输出 5

    }

  }

}

使用 DllImport 属性和“EntryPoint”属性就可以引用 C++ DLL 中的 Add 函数,然后像直接调用 C# 中的函数一样调用即可。

通过 C# 调用 C++ DLL 是 C# 开发中非常重要的一个功能,这样可以让我们使用 C++ 代码中的许多优秀功能,并将其和 C# 中的其他功能结合起来,可以极大地方便开发。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复