C#调用C语言生成的动态链接库(C语言怎么生成链接库,64位下载mingw)

  网上关于C#怎么调用C语言生成的链接库的资料太少了,所以我在这里详细介绍怎么用C语言生成动态链接库,怎么用C#下载。由于C语言生成动态链接库需要使用mingw,所以我从三个部分来介绍。

一、下载mingw

  mingw官网上给的安装文件是32位的,由于我的电脑是64位的,所以我下载了一个64位的,结果安装的时候一直不成功,最后我选择了一个GNU工具集合来下载安装mingw,下载地址是http://www.pc6.com/softview/SoftView_56757.html

  下载完成后安装(这个就不具体说了),安装完成后一定要记得将MinGW的安装路径的bin文件夹(例如D:\MinGW\bin)配置在Path环境变量中。

  打开cmd命令程序,输入gcc -v,显示如下,则说明安装成功了

C#调用C语言生成的动态链接库(C语言怎么生成链接库,64位下载mingw)_第1张图片

二、生成C语言动态链接库

 1.首先建立一个C语言源文件test.c

void swap(int* a, int* b)
{int c = *a;*a = *b;
}
*b = c;

  2.生成.dll文件

  将你建立的test.c文件,复制到mingw安装文件下的bin目录中,打开cmd命令行,输入命令:

gcc -shared -o test.dll test.c

  此时在这个文件夹(bin)下,有一个test.dll文件,这个就是动态链接库。

    C#调用C语言生成的动态链接库(C语言怎么生成链接库,64位下载mingw)_第2张图片

三、C#调用动态链接库

1.建立一个C#控制台程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;namespace testC{
[DllImport("test.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
class Program {
// [DllImport(PCAP_DLL, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public unsafe static extern void swap(int* a, int* b); static void Main(string[] args) {
unsafe
int a = 1; int b = 2; Console.WriteLine($"Before Swap a={a},b={b}"); {
Console.ReadKey();
swap(&a,&b); } Console.WriteLine($"After Swap a={a},b={b}"); Console.WriteLine("\n");
}
}
}

注意:DLL导入特性声明了要调用的函数,之后就可以调用这个方法。因为在C#源代码中使用了指针和取地址符号,所以要用unsafe代码块。

2.将test.dll放在Debug目录下

C#调用C语言生成的动态链接库(C语言怎么生成链接库,64位下载mingw)_第3张图片

3.添加关键字unsafe后的代码会被VS编译环境报错。

右键菜单栏里面的选项,选择testC属性,这里的testC是我建立的项目名。将我红色圈出的这个打上对勾。

C#调用C语言生成的动态链接库(C语言怎么生成链接库,64位下载mingw)_第4张图片

到此,我们可以成功的运行了。结果如图所示:

C#调用C语言生成的动态链接库(C语言怎么生成链接库,64位下载mingw)_第5张图片

(欢迎大家指正与批评,谢谢)





你可能感兴趣的:(C#学习)