C# 调用动态链接库

C#调用动态链接库主要是通过DllImport来实现的.

  1. 在调用DLL的CS文件中引入using System.Runtime.InteropServices;
  2. 将DLL拷贝至工程目录bin下的Debug或者Release文件夹内;

声明调用函数,以打开磁卡读写器为例:/* 丛指定的端口打开磁卡读写机 */
[DllImport("HCE300_API.dll", EntryPoint = "HCE300_Open", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int init(int ComPort);

DllImport 指定要动态调用的DLL位置名称

EntryPoint 指定DLL内部函数名

CharSet 说明内部数据返回编码

SetLastError 确定在函数返回前是否调用Win32的SetLastError

下面是对应于Dll函数的自定义函数声明,一定要保证参数列表一致。如果再DllImport中指定ExactSpelling=true,函数名要与EntryPoint保持一致,指定为false,可以自定义函数名。

外部函数就可以直接通过init函数调用Dll内部的封装函数了。

注意:Dll函数的参数列表中如果有指针类型的参数,那么工程必须是非线程安全的。示例如下:    byte[] data = new byte[301];//声明外部byte数组
   
   fixed (byte* pData = data)//定义指针,指向外部数组,fixed 语句设置指向托管变量的指针
   {
       byte* poiner = pData;
       int ret = SDK.read(poiner);//函数指针入口
       string str = System.Text.Encoding.ASCII.GetString(data);
   }