网上关于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语言动态链接库
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#调用动态链接库
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) {unsafeint 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目录下
3.添加关键字unsafe后的代码会被VS编译环境报错。
右键菜单栏里面的选项,选择testC属性,这里的testC是我建立的项目名。将我红色圈出的这个打上对勾。
到此,我们可以成功的运行了。结果如图所示:
(欢迎大家指正与批评,谢谢)