Nitro's

Dec 13, 2013 - Comments - dev tech

C# 调用动态链接库

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

  1. 在调用DLL的CS文件中引入using System.Runtime.InteropServices;
  2. 将DLL拷贝至工程目录bin下的Debug或者Release文件夹内;
  3. 声明调用函数,以打开磁卡读写器为例:

    /* 丛指定的端口打开磁卡读写机 */
    [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,可以自定义函数名。

  4. 外部函数就可以直接通过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);
        }
    

Tags: dotnet

观察者模式 监听器 Android 读取媒体库文件 4.4

comments powered by Disqus