那些年,用C#调用过的外部Dll
2021-01-16 21:13
                         标签:bool   VID   parallel   start   ret   print   timeout   jit   unit    
     经常有人找到我咨询以前在csdn资源里分享的dll调用。算算也写过N多接口程序。翻一翻试试写篇随笔。 还有很多,以后补上。大多找不到了。也是懒得找了。 DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息。
先抄点名词解释
 DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称。
 DllImport的定义如下:
 
 
[AttributeUsage(AttributeTargets.Method)]  public class DllImportAttribute: System.Attribute
  {   public DllImportAttribute(string dllName) {…} //定位参数为dllName
   public CallingConvention CallingConvention; //入口点调用约定
   public CharSet CharSet; //入口点采用的字符接
   public string EntryPoint; //入口点名称
   public bool ExactSpelling; //是否必须与指示的入口点拼写完全一致,默认false
   public bool PreserveSig; //方法的签名是被保留还是被转换
   public bool SetLastError; //FindLastError方法的返回值保存在这里
   public string Value { get {…} }
  }Mwic_32.dll(明华IC卡)
 
 
using System;
using System.Text;
using System.Runtime.InteropServices;
namespace mw_rdp
{    /// 
    /// IC4442 的摘要说明。
    /// 
    public unsafe class IC4442
    {
        public IC4442()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }
        //向IC卡中写数据
        [DllImport("Mwic_32.dll", EntryPoint = "swr_4442", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern int swr_4442(int icdev, int offset, int len, char* w_string);
        [DllImport("Mwic_32.dll", EntryPoint="srd_4442",  SetLastError=true,
             CharSet=CharSet.Auto, ExactSpelling=false, 
             CallingConvention=CallingConvention.StdCall)]
            //说明:    从指定地址读数据  
            //         调用:    icdev:    通讯设备标识符 offset:   偏移地址,其值范围0~255
            //          len:      字符串长度,其值范围1~256       r_string: 读出数据所存放地址指针
            //返回:     0   错误    =0 正确
        public  static extern  Int16 srd_4442(int icdev, Int16 offset, Int16 len,[MarshalAs(UnmanagedType.LPArray)]byte[] r_string ); 
                 [DllImport("Mwic_32.dll", EntryPoint="chk_4442",  SetLastError=true,
             CharSet=CharSet.Auto , ExactSpelling=false,
             CallingConvention=CallingConvention.StdCall)]
            //  说明:    检查卡型是否正确  
            //调用:    icdev:   通讯设备标识符 
            //返回:     
        public static extern  Int16 chk_4442(int icdev);
        [DllImport("Mwic_32.dll", EntryPoint = "csc_4442", SetLastError = true,
     CharSet = CharSet.Auto, ExactSpelling = true,
     CallingConvention = CallingConvention.Winapi)]
        public static extern Int16 Csc_4442(int icdev, int len, [MarshalAs(UnmanagedType.LPArray)] byte[] p_string);
        [DllImport("Mwic_32.dll", EntryPoint="wsc_4442",  SetLastError=true,
             CharSet=CharSet.Auto, ExactSpelling=false,
             CallingConvention=CallingConvention.StdCall)]
            //说明:    改写卡密码
            //调用:    icdev:    通讯设备标识符 len: 密码个数,其值为3 p_string: 新密码地址指针
            //返回:    
        public static extern Int16 wsc_4442(int icdev, Int16 len, [MarshalAs(UnmanagedType.LPArray)]byte[] p_string);
        [DllImport("Mwic_32.dll", EntryPoint="rsc_4442",  SetLastError=true,
             CharSet=CharSet.Auto, ExactSpelling=false,
             CallingConvention=CallingConvention.StdCall)]
            //说明:    读出卡密码  
            //调用:    icdev:    通讯设备标识符  len:      密码个数,其值为3     p_string: 存放密码地址指针
            // 返回:    0   错误   =0   正确  
                  public static extern Int16 rsc_4442(int icdev, Int16 len,  [MarshalAs(UnmanagedType.LPArray)]byte[] p_string);
        [DllImport("Mwic_32.dll", EntryPoint="rsct_4442",  SetLastError=true,
             CharSet=CharSet.Auto, ExactSpelling=false,
             CallingConvention=CallingConvention.StdCall)]
            //说明:    读出密码错误计数器值
            //调用:    icdev:    通讯设备标识符 counter:  密码错误记数值存放指针
            //返回:     =0   正确
        public static extern Int16 rsct_4442(int icdev, out byte counter);
    }
}MainDll.Dll(爱迪尔门锁)

public static class AdelDoorCardIfc
    {
        public enum AdelSoftType
        {
            Lock3200 = 1,
            Lock3200K,
            Lock4200,
            Lock4200D,
            Lock5200,
            Lock6200,
            Lock7200,
            Lock7200D,
            Lock9200,
            Lock9200T,
            A30,
            A50 = 14,
            A90 = 18,
            A92 = 22
        }
        public enum TMEncoder
        {
            DS9097E = 1,
            DS9097U = 5
        }
        public enum EnCoderType
        {
            手动发行机,
            自动发行机,
            MSR206磁卡
        }
        private const string IFC_DllFileName = "MainDll.Dll";
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int SetPort(int Soft, int Port, int EncoderType, int TMEncoder);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int Reader_Beep(int Sound);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int EndSession();
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern void ChangeUser(string username);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int Init(int Soft, string Server, string UName, int EnCoderType, int TMEncoder);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int NewKey(string RoomNo, string Gate, string StartTime, string GuestName, string GuestId, int OverFlag, out int CardNo, string str1, string str2);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int AddKey(string RoomNo, string Gate, string StartTime, string GuestName, string GuestId, int OverFlag, out int CardNo, string str1, string str2);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int DupKey(string RoomNo, string Gate, string StartTime, string GuestName, string GuestId, int OverFlag, out int CardNo, string str1, string str2);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int ReadCard(StringBuilder room, StringBuilder gate, StringBuilder stime, StringBuilder guestname, StringBuilder guestid, StringBuilder track1, StringBuilder track2, ref int cardno, ref int st);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int EraseCard(int CardNo, string str1, string str2);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int CheckOut(string RoomNo, int CardNo);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int LostCard(string RoomNo, int CardNo);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int ReadCardId(ref uint cardNo);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int ReadIC(int start, int len, StringBuilder buff);
        [DllImport("MainDll.Dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        public static extern int WriteIC(int start, int len, StringBuilder buff);
        public static void ShowMessageResult(int iResult, bool ifSystemBarNotity)
        {
            string text = string.Empty;
            switch (iResult)
            {
            case 0:
                text = "门口接口调用,操作成功!";
                break;
            case 1:
                text = "读写错误或者数据错误!";
                break;
            case 2:
                text = "卡已损坏!";
                break;
            case 3:
                text = "没有检测到卡!";
                break;
            case 4:
                text = "串口通信错误,请检测连接线!";
                break;
            case 5:
                text = "卡被更换!";
                break;
            case 6:
                text = "不是新卡!";
                break;
            case 7:
                text = "卡是新卡!";
                break;
            case 8:
                text = "非本系统卡!";
                break;
            case 9:
                text = "不是客人卡!";
                break;
            case 10:
                text = "不是会员卡!";
                break;
            case 11:
                text = "密码错误!";
                break;
            case 12:
                text = "无开门记录!";
                break;
            case 13:
                text = "卡型不正确!";
                break;
            case 14:
                text = "参数错误!";
                break;
            case 15:
                text = "用户取消操作(按下

posdll.dll(北洋打印机封装的OPOS指令打印DLL)

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.IO.Ports;
namespace PosPrintService
{
    /// 
上一篇:WPF多窗口磁性对齐贴边功能实现
下一篇:三种方法,让WPF项目生成单文件