C# 调用动态链接库
C#调用动态链接库主要是通过DllImport来实现的.
- 在调用DLL的CS文件中引入using System.Runtime.InteropServices;
- 将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);
}