首页 > 代码库 > 那些年,用C#调用过的外部Dll
那些年,用C#调用过的外部Dll
经常有人找到我咨询以前在csdn资源里分享的dll调用。算算也写过N多接口程序。翻一翻试试写篇随笔。
- 明华IC读写器DLL
- 爱迪尔门锁接口DLL
- 通用OPOS指令打印之北洋pos打印机dll
- 明泰非接触式RF读写器DLL
还有很多,以后补上。大多找不到了。也是懒得找了。
先抄点名词解释
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{ /// <summary> /// IC4442 的摘要说明。 /// </summary> 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: 通讯设备标识符 //返回: <0 错误 =0 正确 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: 新密码地址指针 //返回: <0 错误 =0 正确 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 错误 >=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 = "用户取消操作(按下<ESC>键)!"; break; case 16: text = "等待超时!"; break; case 17: text = "插卡错误!"; break; case 18: text = "卡是空白卡或插卡错误!"; break; case 19: text = "19"; break; case 20: text = "没有调用Init函数!"; break; case 21: text = "不支持该版本的门锁软件!"; break; case 22: text = "连接(门锁系统数据库)错误!"; break; case 23: text = "门锁系统参数不存在!"; break; case 24: text = "初始化失败!"; break; case 25: text = "没有客人在住/指定客人不存在!"; break; case 26: text = "客房已满!"; break; case 27: text = "没有此卡记录!"; break; case 28: text = "没有调用SetPort函数!"; break; case 29: text = "无效的客房房号!"; break; case 30: text = "错误的时间范围!"; break; case 31: text = "卡号已存在,无法登记!"; break; case 32: text = "不支持调用!"; break; case 33: text = "无效的授权码,授权码错误或过期!"; break; } if (ifSystemBarNotity) { Utility.NotifyMessageBox(text, "接口系统提示"); } else { MessageBox.Show(text, "接口系统提示"); } } }
posdll.dll(北洋打印机封装的OPOS指令打印DLL)
using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;using System.IO.Ports;namespace PosPrintService{ /// <summary> /// 北洋OPOS指令集二次开发包DLL调用 /// public class BeiYangOPOS { const string _DllVer = "1.4"; /// <summary> /// 获取动态库版本号 /// </summary> public string GetDllVer { get { return _DllVer;} } /// <summary> /// 设备打开后的句柄 /// </summary> public IntPtr POS_IntPtr; /// <summary> /// 函数返回值 /// </summary> public uint POS_SUCCESS = 1001;// 函数执行成功 public uint POS_FAIL = 1002; // 函数执行失败 public uint POS_ERROR_INVALID_HANDLE = 1101; // 端口或文件的句柄无效 public uint POS_ERROR_INVALID_PARAMETER = 1102;// 参数无效 public uint POS_ERROR_NOT_BITMAP = 1103 ; // 不是位图格式的文件 public uint POS_ERROR_NOT_MONO_BITMAP = 1104;// 位图不是单色的 public uint POS_ERROR_BEYONG_AREA = 1105 ;//位图超出打印机可以处理的大小 public uint POS_ERROR_INVALID_PATH = 1106; // 没有找到指定的文件路径或名 /// <summary> /// 停止位 /// </summary> public uint POS_COM_ONESTOPBIT = 0x00;//停止位为1 public uint POS_COM_ONE5STOPBITS = 0x01;//停止位为1.5 public uint POS_COM_TWOSTOPBITS = 0x02;//停止位为2 /// <summary> /// 奇偶校验 /// </summary> public uint POS_COM_NOPARITY = 0x00;//无校验 public uint POS_COM_ODDPARITY = 0x01;//奇校验 public uint POS_COM_EVENPARITY = 0x02;//偶校验 public uint POS_COM_MARKPARITY = 0x03;//标记校验 public uint POS_COM_SPACEPARITY = 0x04;//空格校验 /// <summary> /// 其他COM口参数及端口类型定义 /// </summary> public uint POS_COM_DTR_DSR = 0x00;// 流控制为DTR/DST public uint POS_COM_RTS_CTS = 0x01;// 流控制为RTS/CTS public uint POS_COM_XON_XOFF = 0x02;// 流控制为XON/OFF public uint POS_COM_NO_HANDSHAKE = 0x03;//无握手 public uint POS_OPEN_PARALLEL_PORT = 0x12;//打开并口通讯端口 public uint POS_OPEN_BYUSB_PORT = 0x13;//打开USB通讯端口 public uint POS_OPEN_PRINTNAME = 0X14;// 打开打印机驱动程序 public uint POS_OPEN_NETPORT = 0x15;// 打开网络接口 public uint POS_CUT_MODE_FULL = 0x00;// 全切 public uint POS_CUT_MODE_PARTIAL = 0x01;// 半切 /// <summary> /// 打开POS机的端口 开始会话 /// </summary> /// <param name="lpName"> ///指向以 null 结尾的打印机名称或端口名称。 ///当参数nParam的值为POS_COM_DTR_DSR、POS_COM_RTS_CTS、POS_COM_XON_XOFF或POS_COM_NO_HANDSHAKE 时, “COM1”,“COM2”,“COM3”,“COM4”等表示串口; ///当参数nParam的值为POS_OPEN_PARALLEL_PORT时,“LPT1”,“LPT2”等表示并口; ///当参数nParam的值为POS_OPEN_BYUSB_PORT时,“BYUSB-0”、“BYUSB-1”、“BYUSB-2”、“BYUSB-3”等表示USB端口。 ///当参数nParam的值为POS_OPEN_PRINTNAME时,表示打开指定的打印机。 ///当参数nParam的值为POS_OPEN_NETPORT时,表示打开指定的网络接口,如“192.168.10.251”表示网络接口IP地址</param> /// <param name="nComBaudrate">串口通信需要的波特率</param> /// <param name="nComDataBits">串口通信需要的数据位</param> /// <param name="nComStopBits">串口通信需要的停止位</param> /// <param name="nComParity">串口通信需要的是否要奇偶校验</param> /// <param name="nParam">指向以 null 结尾的打印机名称或端口名称。 /// 参数nParam的值为POS_COM_DTR_DSR、POS_COM_RTS_CTS、POS_COM_XON_XOFF或POS_COM_NO_HANDSHAKE 时, /// “COM1”,“COM2”,“COM3”,“COM4”等表示串口; /// 当参数nParam的值为POS_OPEN_PARALLEL_PORT时,“LPT1”,“LPT2”等表示并口; /// 当参数nParam的值为POS_OPEN_BYUSB_PORT时,“BYUSB-0”、“BYUSB-1”、“BYUSB-2”、“BYUSB-3”等表示USB端口。 /// 当参数nParam的值为POS_OPEN_PRINTNAME时,表示打开指定的打印机。</param> /// <returns>如果函数调用成功,返回一个已打开的端口句柄。如果函数调用失败,返回值为 INVALID_HANDLE_VALUE (-1)。</returns> [DllImport("POSDLL.dll", CharSet = CharSet.Ansi)] public static extern IntPtr POS_Open([MarshalAs(UnmanagedType.LPStr)]string lpName, uint nComBaudrate, uint nComDataBits, uint nComStopBits, uint nComParity, uint nParam); /// <summary> /// 关闭已经打开的并口或串口,USB端口,网络接口或打印机。 /// </summary> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_Close(); /// <summary> /// 复位打印机,把打印缓冲区中的数据清除,字符和行高的设置被清除,打印模式被恢复到上电时的缺省模式。 /// </summary> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_Reset(); /// <summary> /// 设置打印机的移动单位。 /// </summary> /// <param name="nHorizontalMU">把水平方向上的移动单位设置为 25.4 / nHorizontalMU 毫米。可以为0到255。</param> /// <param name="nVerticalMU">把垂直方向上的移动单位设置为 25.4 / nVerticalMU 毫米。可以为0到255。</param> /// <returns> /// 如果函数成功,则返回值为 POS_SUCCESS。 /// 如果函数失败,则返回值为以下值之一:POS_FAIL POS_ERROR_INVALID_HANDLE POS_ERROR_INVALID_PARAMETER </returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_SetMotionUnit(uint nHorizontalMU, uint nVerticalMU); /// <summary> /// 选择国际字符集和代码页 /// </summary> /// <param name="nCharSet"> /// 指定国际字符集。不同的国际字符集对0x23到0x7E的ASCII码值对应的符号定义是不同的。 /// 可以为以下列表中所列值之一。 /// 0x00 U.S.A 0x01 France 0x02 Germany 0x03 U.K. 0x04 Denmark I 0x05 Sweden /// 0x06 Italy 0x07 Spain I 0x08 Japan 0x09 Nonway 0x0A Denmark II 0x0B Spain II /// 0x0C Latin America 0x0D Korea </param> /// <param name="nCodePage"> /// 指定字符的代码页。不同的代码页对0x80到0xFF的ASCII码值对应的符号定义是不同的。 /// 0x00 PC437 [U.S.A. Standard Europe 0x01 Reserved 0x02 PC850 [Multilingual] /// 0x03 PC860 [Portuguese] 0x04 PC863 [Canadian-French] 0x05 PC865 [Nordic] /// 0x12 PC852 0x13 PC858 /// </param> /// <returns> /// 如果函数成功,则返回值为 POS_SUCCESS。 /// 如果函数失败,则返回值为以下值之一:POS_FAIL POS_ERROR_INVALID_HANDLE POS_ERROR_INVALID_PARAMETER </returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_SetCharSetAndCodePage(uint nCharSet, uint nCodePage); /// <summary> /// POS字体样式 /// </summary> /// public uint POS_FONT_TYPE_STANDARD = 0x00;// 标准 ASCII public uint POS_FONT_TYPE_COMPRESSED = 0x01;// 压缩 ASCII public uint POS_FONT_TYPE_UDC = 0x02; // 用户自定义字符 public uint POS_FONT_TYPE_CHINESE = 0x03; // 标准 “宋体” public uint POS_FONT_STYLE_NORMAL = 0x00; // 正常 public uint POS_FONT_STYLE_BOLD = 0x08; // 加粗 public uint POS_FONT_STYLE_THIN_UNDERLINE = 0x80; // 1点粗的下划线 public uint POS_FONT_STYLE_THICK_UNDERLINE = 0x100; // 2点粗的下划线 public uint POS_FONT_STYLE_UPSIDEDOWN = 0x200; // 倒置(只在行首有效) public uint POS_FONT_STYLE_REVERSE = 0x400; // 反显(黑底白字) public uint POS_FONT_STYLE_SMOOTH = 0x800; // 平滑处理(用于放大时) public uint POS_FONT_STYLE_CLOCKWISE_90 = 0x1000; // 每个字符顺时针旋转 90 度 /// <summary> /// 把将要打印的字符串数据发送到打印缓冲区中,并指定X 方向(水平)上的绝对起始点位置, /// 指定每个字符宽度和高度方向上的放大倍数、类型和风格。 /// </summary> /// <param name="pszString">指向以 null 结尾的字符串缓冲区</param> /// <param name="nOrgx">指定 X 方向(水平)的起始点位置离左边界的点数。</param> /// <param name="nWidthTimes">指定字符的宽度方向上的放大倍数。可以为 1到 6。</param> /// <param name="nHeightTimes">指定字符高度方向上的放大倍数。可以为 1 到 6。</param> /// <param name="nFontType">指定字符的字体类型。</param> /// <param name="nFontStyle">指定字符的字体风格。</param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_S_TextOut([MarshalAs(UnmanagedType.LPStr)]string pszString, uint nOrgx, uint nWidthTimes, uint nHeightTimes, uint nFontType, uint nFontStyle); /// <summary> /// 设置POS的打印模式 (只有两种 页模式和标准模式) /// </summary> /// <param name="nPrintMode"> /// POS_PRINT_MODE_STANDARD 0x00 标准模式(行模式) /// POS_PRINT_MODE_PAGE 0x01 页模式 /// POS_PRINT_MODE_BLACK_MARK_LABEL 0x02 黑标记标签模式 /// POS_PRINT_MODE_WHITE_MARK_LABEL 0x03 白标记标签模式 </param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_SetMode(uint nPrintMode); /// <summary> /// 设置字符的行高。 /// </summary> /// <param name="nDistance">指定行高点数。可以为 0 到 255。每点的距离与打印头分辨率相关。</param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_SetLineSpacing(uint nDistance); /// <summary> /// 设置字符的右间距(相邻两个字符的间隙距离)。 /// </summary> /// <param name="nDistance">指定右间距的点数。可以为 0 到 255。每点的距离与打印头分辨率相关。</param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_SetRightSpacing(int nDistance); /// <summary> /// 向前走纸。 /// 1.如果在标准打印模式(行模式)下打印文本,则打印缓冲区中的数据,且打印位置自动移动到下一行的行首。 /// 2.如果在标准打印模式(行模式)下打印位图,则在指定的位置打印位图,且打印位置自动移动到下一行的行首。 /// 3.如果在页模式或标签模式下,则把需要打印的数据设置在指定的位置,同时把打印位置移动到下一个行首, /// 但是并不立即进纸并打印,而是一直到调用 POS_PL_Print 函数时才打印。 /// </summary> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_FeedLine(); /// <summary> /// 打印头换n行 /// </summary> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_FeedLines(uint nLines); /// <summary> /// 切纸 /// </summary> /// <param name="nMode">模式编号 半切或是全切</param> /// <param name="nDistance">走位的距离</param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_CutPaper(uint nMode, uint nDistance); /// <summary> /// 设置右边距 /// </summary> /// <param name="nDistance">右边距</param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_SetRightSpacing(uint nDistance); /// <summary> /// 预下载一幅位图到打印机的 RAM 中,同时指定此位图的 ID 号。 /// </summary> /// <param name="pszPath">指向以 null 结尾的表示位图路径及其文件名的字符串。</param> /// <param name="nID">指定将要下载的位图的 ID 号。可以为 0 到 7。</param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_PreDownloadBmpToRAM([MarshalAs(UnmanagedType.LPStr)]string pszPath, uint nID); /// <summary> /// 下载并打印位图 /// </summary> /// <param name="pszPath">指向以null 结尾的包含位图文件路径及其名称的字符串。</param> /// <param name="nOrgx">指定将要打印的位图和左边界的距离点数。可以为 0到 65535 点。</param> /// <param name="nMode">指定位图的打印模式。</param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_S_DownloadAndPrintBmp([MarshalAs(UnmanagedType.LPStr)]string pszPath, uint nOrgx, uint nMode); [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_S_PrintBmpInRAM(uint nID, uint nOrgx, uint nMode); [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_S_PrintBmpInFlash(uint nID, uint nOrgx, uint nMode); /// <summary> /// 通过串口返回当前打印机的状态。此函数是实时的。 /// </summary> /// <param name="address"></param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_RTQueryStatus(byte[] address); /// <summary> /// 通过串口查询打印机当前的状态。此函数是非实时的。 /// </summary> /// <param name="pszStatus"> /// 指向返回的状态数据的缓冲区,缓冲区大小为 1 个字节。 /// 0,1 0/1 容纸器中有纸 / 纸将用尽 2,3 0/1 打印头处有纸 / 无纸 /// 4,5 0/1 钱箱连接器引脚 3 的电平为低 / 高(表示打开或关闭) /// 6,7 0 保留(固定为0) /// </param> /// <param name="nTimeouts">设置查询状态时大约的超时时间(毫秒)。</param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_QueryStatus(byte[] pszStatus, int nTimeouts); /// <summary> /// 通过网络接口查询返回当前打印机的状态。 /// </summary> /// <param name="ipAddress">设备IP地址。如“192.168.10.251”。</param> /// <param name="pszStatus"> /// 指向接收返回状态的缓冲区,缓冲区大小为 1 个字节。 /// 0 0/1 钱箱连接器引脚 3 的电平为低/高(表示打开或关闭) /// 1 0/1 打印机联机/脱机 /// 2 0/1 上盖关闭/打开 /// 3 0/1 没有/正在由Feed键按下而进纸 /// 4 0/1 打印机没有/有出错 /// 5 0/1 切刀没有/有出错 /// 6 0/1 有纸/纸将尽(纸将尽传感器探测) /// 7 0/1 有纸/纸用尽(纸传感器探测) /// </param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern int POS_NETQueryStatus([MarshalAs(UnmanagedType.LPStr)]string ipAddress, out Byte pszStatus); /// <summary> /// 设置并打印条码。 /// </summary> /// <param name="pszInfo">指向以 null 结尾的字符串。每个字符允许的范围和格式与具体条码类型有关。</param> /// <param name="nOrgx">指定将要打印的条码的水平起始点与左边界的距离点数。可以为 0 到65535。</param> /// <param name="nType"> /// 指定条码的类型。可以为以下列表中所列值之一。 /// POS_BARCODE_TYPE_UPC_A 0x41 UPC-A POS_BARCODE_TYPE_UPC_E 0x42 UPC-C /// POS_BARCODE_TYPE_JAN13 0x43 JAN13(EAN13) POS_BARCODE_TYPE_JAN8 0x44 JAN8(EAN8) /// POS_BARCODE_TYPE_CODE39 0x45 CODE39 POS_BARCODE_TYPE_ITF 0x46 INTERLEAVED 2 OF 5 /// POS_BARCODE_TYPE_CODEBAR 0x47 CODEBAR POS_BARCODE_TYPE_CODE93 0x48 25 /// POS_BARCODE_TYPE_CODE128 0x49 CODE 128 </param> /// <param name="nWidthX"> /// 指定条码的基本元素宽度。 /// 2 0.25mm 0.25mm 0.625mm 3 0.375mm 0.375mm 1.0mm 4 0.5mm 0.5mm 1.25mm /// 5 0.625mm 0.625mm 1.625mm 6 0.75mm 0.75mm 1.875mm /// </param> /// <param name="nheight">指定条码的高度点数。可以为 1 到 255 。默认值为162 点。</param> /// <param name="nHriFontType"> /// 指定 HRI(Human Readable Interpretation)字符的字体类型。可以为以下列表中所列值之一。 /// POS_FONT_TYPE_STANDARD 0x00 标准ASCII POS_FONT_TYPE_COMPRESSED 0x01 压缩ASCII /// </param> /// <param name="nHriFontPosition"> /// 指定HRI(Human Readable Interpretation)字符的位置。 /// POS_HRI_POSITION_NONE 0x00 不打印 POS_HRI_POSITION_ABOVE 0x01 只在条码上方打印 /// POS_HRI_POSITION_BELOW 0x02 只在条码下方打印 POS_HRI_POSITION_BOTH 0x03 条码上、下方都打印 /// </param> /// <param name="nBytesOfInfo">指定由参数 pszInfoBuffer指向的字符串个数,即将要发送给打印机的字符总数。具体值与条码类型有关。</param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_S_SetBarcode([MarshalAs(UnmanagedType.LPStr)]string pszInfo, uint nOrgx,uint nType,uint nWidthX,uint nheight, uint nHriFontType,uint nHriFontPosition,uint nBytesOfInfo); [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_PL_SetArea(uint nOrgx , uint nOrgY , uint nWidth , uint nheight , uint nDirection ); [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_PL_TextOut([MarshalAs(UnmanagedType.LPStr)]string pszString,uint nOrgx,uint nOrgY, uint nWidthTimes, uint nHeightTimes, uint nFontType, uint nFontStyle); [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_PL_PrintBmpInRAM(uint nID , uint nOrgx , uint nOrgY , uint nMode ); [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_PL_PrintBmpInFlash(uint nID, uint nOrgx, uint nOrgY, uint nMode); [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_PL_SetBarcode([MarshalAs(UnmanagedType.LPStr)]string pszInfo, uint nOrgx , uint nOrgY , uint nType , uint nWidthX,uint nheight, uint nHriFontType,uint nHriFontPosition,uint nBytesOfInfo); [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_PL_Clear(); [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_PL_Print(); /// <summary> /// 往钱箱引脚发送脉冲以打开钱箱。 /// </summary> /// <param name="nID">指定钱箱的引脚。0x00 钱箱连接器引脚2 0x01 钱箱连接器引脚5 </param> /// <param name="nOnTimes">指定往钱箱发送的高电平脉冲保持时间,即 nOnTimes × 2 毫秒。可以为1 到 255。</param> /// <param name="nOffTimes">指定往钱箱发送的低电平脉冲保持时间,即 nOffTimes × 2 毫秒。可以为1 到 255。</param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_KickOutDrawer(uint nID, uint nOnTimes, uint nOffTimes); /// <summary> /// 新建一个打印作业。 /// </summary> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern bool POS_StartDoc(); /// <summary> /// 结束一个打印作业。 /// </summary> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern bool POS_EndDoc(); /// <summary> /// 发送数据到端口或文件。通用端口打印可以使用此函数 一般不能设置字体大小样式等 /// </summary> /// <param name="hPort">端口或文件句柄。可以通过POS_Open来获取</param> /// <param name="pszData">指向将要发送的数据缓冲区。</param> /// <param name="nBytesToWrite">指定将要发送的数据的字节数。</param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_WriteFile(IntPtr hPort, byte[] pszData, uint nBytesToWrite); /// <summary> /// 从串口,或USB端口或文件读数据到指定的缓冲区。 /// </summary> /// <param name="hPort">端口或文件句柄。可以通过POS_Open来获取</param> /// <param name="pszData">指向将要读取的数据缓冲区。</param> /// <param name="nBytesToRead">数据的字节数</param> /// <param name="nTimeouts">可能是读取数据的间隔时间</param> /// <returns></returns> [DllImport("POSDLL.dll", SetLastError = true)] public static extern IntPtr POS_ReadFile(IntPtr hPort, byte[] pszData, uint nBytesToRead, uint nTimeouts); /// <summary> /// 打开打印设备的串口 /// </summary> /// <param name="PrintSerialPort">串口对象(需要先初始化并测试参数都有效的情况下,传进来)</param> /// <returns>是否打开成功</returns> public bool OpenComPort(ref SerialPort PrintSerialPort) { uint i_stopbits=0; if (PrintSerialPort.StopBits== StopBits.One) i_stopbits=POS_COM_ONESTOPBIT; if (PrintSerialPort.StopBits== StopBits.OnePointFive) i_stopbits=POS_COM_ONE5STOPBITS; if (PrintSerialPort.StopBits== StopBits.Two) i_stopbits=POS_COM_TWOSTOPBITS; uint i_nComParity=0; if (PrintSerialPort.Parity== Parity.None) i_nComParity=POS_COM_NOPARITY; if (PrintSerialPort.Parity== Parity.Even) i_nComParity=POS_COM_EVENPARITY; if (PrintSerialPort.Parity== Parity.Odd) i_nComParity=POS_COM_ODDPARITY; if (PrintSerialPort.Parity== Parity.Space) i_nComParity=POS_COM_SPACEPARITY; if (PrintSerialPort.Parity== Parity.Mark) i_nComParity=POS_COM_MARKPARITY; uint i_para=0; if (PrintSerialPort.Handshake== Handshake.None) i_para=POS_COM_NO_HANDSHAKE; if (PrintSerialPort.Handshake== Handshake.RequestToSend) i_para=POS_COM_DTR_DSR; if (PrintSerialPort.Handshake== Handshake.RequestToSendXOnXOff) i_para=POS_COM_RTS_CTS; if (PrintSerialPort.Handshake== Handshake.XOnXOff) i_para=POS_COM_XON_XOFF; POS_IntPtr = POS_Open(PrintSerialPort.PortName, (uint)PrintSerialPort.BaudRate, (uint)PrintSerialPort.DataBits, i_stopbits, i_nComParity, i_para); if ((int)POS_IntPtr != -1) return true; else return false; } /// <summary> /// 打开打印设备并口 /// </summary> /// <param name="LPTPortName">并口名称</param> /// <returns>是否打开成功</returns> public bool OpenLPTPort(string LPTPortName) { POS_IntPtr = POS_Open(LPTPortName, 0, 0, 0, 0, POS_OPEN_PARALLEL_PORT); if ((int)POS_IntPtr != -1) return true; else return false; } /// <summary> /// 打开打印设备的网口 /// </summary> /// <param name="IPAddress">设备的IP地址</param> /// <returns>是否打开成功</returns> public bool OpenNetPort(string IPAddress) { POS_IntPtr = POS_Open(IPAddress, 0, 0, 0, 0, POS_OPEN_NETPORT); if ((int)POS_IntPtr != -1) return true; else return false; } /// <summary> /// 打开打印设备的USB端口 /// </summary> /// <param name="USBPortName">“BYUSB-0”、“BYUSB-1”、“BYUSB-2”、“BYUSB-3”</param> /// <returns>是否打开成功</returns> public bool OpenUSBPort(string USBPortName) { POS_IntPtr = POS_Open(USBPortName, 0, 0, 0, 0, POS_OPEN_BYUSB_PORT); if ((int)POS_IntPtr != -1) return true; else return false; } /// <summary> /// 使用windows打印驱动程序来驱动OPOS设备 /// </summary> /// <param name="PrintName">打印驱动程序对应的打印机名称</param> /// <returns>是否打开成功</returns> public bool OpenPrinter(string PrintName) { POS_IntPtr = POS_Open(PrintName, 0, 0, 0, 0, POS_OPEN_PRINTNAME); if ((int)POS_IntPtr != -1) return true; else return false; } /// <summary> /// 关闭设备端口 /// </summary> /// <returns>是否关闭成功</returns> public bool ClosePrinterPort() { IntPtr tmpIntPtr = POS_Close(); return ((uint)tmpIntPtr == POS_SUCCESS); } }}
tsclib.dll(GP3120条形码打印机API)
using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace Com.DataCool.GP3120API{ /// <summary> /// GP 3120条形码打印机API 分辨率:203 DPI /// (单位换算:200 DPI,1 点=1/8 mm, 300 DPI,1 点=1/12 mm) /// </summary> public class TSC_Lib_API { /// <summary> /// 指定计算机端的输出端口 单机打印时,请指定打印机驱动程序名称,例如: TSC TDP-245 /// 打开端口 独占打印机 /// </summary> /// <param name="PrinterName"></param> /// <returns></returns> [DllImport("tsclib.dll")] public static extern int openport(string PrinterName); /// <summary> /// 关闭指定的计算机端输出端口 结束端口的独占 /// </summary> /// <returns></returns> [DllImport("tsclib.dll")] public static extern int closeport(); /// <summary> /// 发送指令 /// </summary> /// <param name="Command">内建指令见指令集pdf</param> /// <returns></returns> [DllImport("tsclib.dll")] public static extern int sendcommand(string Command); /// <summary> /// 清空打印机的缓冲区 /// </summary> /// <returns></returns> [DllImport("tsclib.dll")] public static extern int clearbuffer(); /// <summary> /// 跳页,该函数需在setup 后使用 /// </summary> /// <returns></returns> [DllImport("tsclib.dll")] public static extern int formfeed(); /// <summary> /// 设定纸张不回吐 /// </summary> /// <returns></returns> [DllImport("tsclib.dll")] public static extern int nobackfeed(); /// <summary> /// 设定标签的宽度、高度、打印速度、打印浓度、传感器类别、gap/black mark 垂直间距、gap/black mark 偏移距离) /// </summary> /// <param name="LabelWidth">标签宽度,单位mm</param> /// <param name="LabelHeight">标签高度,单位mm</param> /// <param name="Speed">打印速度 1.0: 每秒1.0 英寸打印速度 1.0,1.5,2.0,3.0,4.0,5.0,6.0</param> /// <param name="Density">打印浓度 0~15,数字越大打印结果越黑</param> /// <param name="Sensor">传感器类别 0 表示使用垂直间距传感器(gap sensor) 1 表示使用黑标传感器(black mark sensor) f垂直间距高度,g偏移距离 mm</param> // f: 字符串型别,设定gap/black mark 垂直间距高度,单位: mm // g: 字符串型别,设定gap/black mark 偏移距离,单位: mm,此参数若使用一般标签 时均设为0 /// <param name="Vertical">?</param> /// <param name="Offset">设定gap/black mark 偏移距离,单位: mm,此参数若使用一般标签时均设为0</param> /// <returns></returns> [DllImport("tsclib.dll")] public static extern int setup(string LabelWidth, string LabelHeight, string Speed, string Density, string Sensor, string Vertical, string Offset); /// <summary> /// 下载单色PCX 格式图文件至打印机 /// </summary> /// <param name="Filename">文件名(可包含路径)</param> /// <param name="ImageName">下载至打印机内存内之文件名(请使用大写文件名)</param> /// <returns></returns> [DllImport("tsclib.dll")] public static extern int downloadpcx(string Filename, string ImageName); /// <summary> /// 使用条形码机内建条形码打印 /// </summary> /// <param name="X">条形码X 方向起始点</param> /// <param name="Y">条形码Y 方向起始点</param> /// <param name="CodeType">一维条码类型 128 128M EAN128 25 25C 39 39C 93 EAN13 ...</param> ////// </param> /// <param name="Height">条形码高度,高度以点来表示</param> /// <param name="Readable">是否打印条形码码文0: 不打印码文1: 打印码文</param> /// <param name="Rotation">条形码旋转角度0: 旋转0 度90: 旋转90 度180: 旋转180 度270: 旋转270 度</param> /// <param name="Narrow">条形码窄bar 比例因子 请参考编程手册</param> /// <param name="Wide">设定条形码窄bar 比例因子 请参考编程手册</param> /// <param name="Code">条形码内容</param> /// <returns></returns> [DllImport("tsclib.dll")] public static extern int barcode(string X, string Y, string CodeType, string Height, string Readable, string Rotation, string Narrow, string Wide, string Code); /// <summary> /// 使用条形码机内建文字打印 (打印机硬字库) /// </summary> /// <param name="X">文字X 方向起始点</param> /// <param name="Y">文字Y 方向起始点</param> /// <param name="FontName">内建字型名称 1~5 TST24.BF2 TSS24.BF2 K</param> /// <param name="Rotation">文字旋转角度 0~270(90的倍数)</param> /// <param name="Xmul">文字X 方向放大倍数,1~8</param> /// <param name="Ymul">文字Y 方向放大倍数,1~8</param> /// <param name="Content">文字内容</param> /// <returns></returns> [DllImport("tsclib.dll")] public static extern int printerfont(string X, string Y, string FontName, string Rotation, string Xmul, string Ymul, string Content); /// <summary> /// 打印条形码 (调用缓冲区设置的条码) /// </summary> /// <param name="NumberOfSet">打印标签个数(set)</param> /// <param name="NumberOfCopoy">打印标签份数(copy)</param> /// <returns></returns> [DllImport("tsclib.dll")] public static extern int printlabel(string NumberOfSet, string NumberOfCopoy); /// <summary> /// 使用Windows TTF 字型打印文字 /// </summary> /// <param name="X">X 方向起始点</param> /// <param name="Y">Y 方向起始点</param> /// <param name="FontHeight">字体高度</param> /// <param name="Rotation">旋转的角度 0~270(90的倍数)</param> /// <param name="FontStyle">字体外形 0-> 标准(Normal) 1-> 斜体(Italic) 2-> 粗体(Bold) 3-> 粗斜体(Bold and Italic)</param> /// <param name="FontUnderline">底线0-> 无底线 1-> 加底线</param> /// <param name="FaceName">字体名称。如: Arial, Times new Roman, 细名体, 标楷体</param> /// <param name="TextContect">文字内容</param> /// <returns></returns> [DllImport("tsclib.dll")] public static extern int windowsfont(int X, int Y, int FontHeight, int Rotation, int FontStyle, int FontUnderline, string FaceName, string TextContect); }}
umf.dll(明泰非接触式RF读写器)
public class S9Dll { /// <summary> /// 初始化通讯口 /// </summary> /// <param name="port">USB通讯口,取值0-99</param> /// <param name="baud">通讯波特率,9600-115200</param> /// <returns>成功返回串口标识符值,失败返回-1</returns> [DllImport("umf.dll", EntryPoint = "fw_init")] public static extern Int32 fw_init(Int16 port, Int32 baud); /// <summary> /// 关闭端口 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <returns></returns> [DllImport("umf.dll", EntryPoint = "fw_exit")] public static extern Int32 fw_exit(Int32 icdev); /// <summary> /// 寻卡,能返回在工作区域内某张卡的序列号 /// </summary> /// <param name="icdev">通讯标识符</param> /// <param name="_Bcnt">寻卡模式,0---表示IDLE模式,一次只对一张卡;1---表示ALL模式,一次可对应多张卡</param> /// <param name="_Snr">返回的卡序列号</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_card")] public static extern Int32 fw_card(Int32 icdev, Byte _Mode, ref ulong _Snr); /// <summary> /// 寻卡,能返回在工作区域内某张卡的序列号(16进制) /// </summary> /// <param name="icdev">通讯标识符</param> /// <param name="_Mode">寻卡模式,0---表示IDLE模式,一次只对一张卡;1---表示ALL模式,一次可对应多张卡</param> /// <param name="_Snr">返回的卡序列号</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_card_hex")] public static extern Int32 fw_card_hex(Int32 icdev, Byte _Mode, ref Byte _Snr); /// <summary> /// 寻卡,能返回在工作区域内某张卡的序列号(10进制) /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Mode">寻卡模式,0---表示IDLE模式,一次只对一张卡;1---表示ALL模式,一次可对应多张卡</param> /// <param name="_Snr">返回的卡序列号</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_card_str")] public static extern Int32 fw_card_str(Int32 icdev, Byte _Mode, ref Byte _Snr); /// <summary> /// 寻卡请求 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Mode">寻卡模式,0---表示IDLE模式,一次只对一张卡;1---表示ALL模式,一次可对应多张卡</param> /// <param name="_TagType">返回卡的类型值,4--MIFARE ONE(M1);2--S70;8--MIFARE PRO;68--ULTRA LIGHT</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_request")] public static extern Int32 fw_request(Int32 icdev, Byte _Mode, ref UInt32 _TagType); /// <summary> /// 防卡冲突,返回卡的序列号 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Bcnt">防卡冲突的级别,这里值为0</param> /// <param name="_Snr">返回卡序列号地址</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_anticoll")] public static extern Int32 fw_anticoll(Int32 icdev, Byte _Bcnt, ref ulong _Snr); /// <summary> /// 从多个卡中选取一个给定序列号的卡 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Snr">卡序列号</param> /// <param name="_Size">指向返回的卡容量数据</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_select")] public static extern Int32 fw_select(Int32 icdev, ulong _Snr, Byte _Size); /// <summary> /// 将密码装入读写模块RAM中 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Mode">装入密码模式,0--KEYA,4--KEYB</param> /// <param name="_SecNr">扇区号(M1卡:0-15;ML卡:0)</param> /// <param name="_NKey">写入读写器中的卡密码</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_load_key")] public static extern Int32 fw_load_key(Int32 icdev, Byte _Mode, Byte _SecNr, Byte[] _NKey); /// <summary> /// 核对密码函数 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Mode">装入密码模式,0--KEYA,4--KEYB</param> /// <param name="_SecNr">要验证密码的扇区号</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_authentication")] public static extern Int32 fw_authentication(Int32 icdev, Byte _Mode, Byte _SecNr); /// <summary> /// 核对密码函数,用此函数时,可以不用执行fw_load_key函数 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Mode">装入密码模式,0--KEYA,4--KEYB</param> /// <param name="_Addr">要验证密码的扇区号</param> /// <param name="_PassBuff">扇区密码(6字节)</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_authentication_pass")] public static extern Int32 fw_authentication_pass(Int32 icdev, Byte _Mode, Byte _Addr, Byte[] _PassBuff); /// <summary> /// 读取卡中数据 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Addr">M1卡---块地址(0-63),MS70(0-255)</param> /// <param name="_Data">读出数据,字符串是ASCII码</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_read")] public static extern Int32 fw_read(Int32 icdev, Byte _Addr, ref Byte _Data); /// <summary> /// 读取卡中数据 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Addr">M1卡---块地址(0-63),MS70(0-255)</param> /// <param name="_Data">读出数据,字符串是十六进制</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_read_hex")] public static extern Int32 fw_read_hex(Int32 icdev, Byte _Addr, ref Byte _Data); /// <summary> /// 向卡中写入数据 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Addr">M1卡---块地址(1-63),MS70(1-255)</param> /// <param name="_Data">要写入的数据(字符串是ASCII码)</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_write")] public static extern Int32 fw_write(Int32 icdev, Byte _Addr, ref Byte _Data); /// <summary> /// 向卡中写入数据 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Addr">M1卡---块地址(1-63),MS70(1-255)</param> /// <param name="_Data">要写入的数据(十六进制)</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_write_hex")] public static extern Int32 fw_write_hex(Int32 icdev, Byte _Addr, ref Byte _Data); /// <summary> /// 中止对该卡操作 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_halt")] public static extern Int32 fw_halt(Int32 icdev); /// <summary> /// DES算法加解密函数 /// </summary> /// <param name="_Key">密钥</param> /// <param name="_Sour">要加解密的数据</param> /// <param name="_Dest">加解密后的数据</param> /// <param name="_M">加解密模式,M=1时,为加密;M=0时,为解密</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_des")] public static extern Int32 fw_des(ref Byte _Key, ref Byte _Sour, ref Byte _Dest, Int32 _M); /// <summary> /// 修改块3的数据 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_SecNr">扇区号(M1:0-15,S70:0-39)</param> /// <param name="_KeyA">密码A</param> /// <param name="_CtrlW">密码控制块</param> /// <param name="_Bk">保留参数,取值位0</param> /// <param name="_KeyB">密码B</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_changeb3")] public static extern Int32 fw_changeb3(Int32 icdev, Byte _SecNr, ref Byte _KeyA, ref Byte _CtrlW, Byte _Bk, ref Byte _KeyB); /// <summary> /// 初始化块值 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Addr">块地址</param> /// <param name="_Value">初始值</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_initval")] public static extern Int32 fw_initval(Int32 icdev, Byte _Addr, ulong _Value); /// <summary> /// 块加值 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Addr">块地址</param> /// <param name="_Value">要增加的值</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_increment")] public static extern Int32 fw_increment(Int32 icdev, Byte _Addr, ulong _Value); /// <summary> /// 读块值 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Addr">块地址</param> /// <param name="_Value">读出值的地址</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_readval")] public static extern Int32 fw_readval(Int32 icdev, Byte _Addr, ref ulong _Value); /// <summary> /// 块减值 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Addr">块地址</param> /// <param name="_Value">要减值</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_decrement")] public static extern Int32 fw_decrement(Int32 icdev, Byte _Addr, ulong _Value); /// <summary> /// 回传函数,将EEPROM中的内容传入卡的内部寄存器 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Addr">要进行回传的块地址</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_restore")] public static extern Int32 fw_restore(Int32 icdev, Byte _Addr); /// <summary> /// 传送,将寄存器的内容传送到EEPROM中 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Addr">要传送的块地址</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_transfer")] public static extern Int32 fw_transfer(Int32 icdev, Byte _Addr); /// <summary> /// 操作卡配置 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Flag">设定要操作的卡类型(0x41=TYPEA,0x42=TYPEB,0x31=IS015693)</param> /// <returns>成功返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_config_card")] public static extern Int16 fw_config_card(Int32 icdev, Byte _Flag); /// <summary> /// 字符串转换函数,十六进制字符转普通字符 /// </summary> /// <param name="_A">转换后的无符号字节数组</param> /// <param name="_Hex">待转换的16进制字符串</param> /// <param name="len">要转换的无符号字节个数</param> /// <returns></returns> [DllImport("umf.dll", EntryPoint = "a_hex")] public static extern Int16 a_hex(Byte[] _A, Byte[] _Hex, Int16 len); /// <summary> /// 字符串转换函数,普通字符转十六进制字符 /// </summary> /// <param name="_Hex">转换后的无符号字节数组</param> /// <param name="_A">待转换的无符号字节数组</param> /// <param name="len">转换后的hex字符串的长度</param> [DllImport("umf.dll", EntryPoint = "hex_a")] public static extern void hex_a(Byte[] _Hex, Byte[] _A, Int16 len); /// <summary> /// 蜂鸣 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Msec">蜂鸣时间,单位是10毫秒</param> /// <returns>成功则返回0</returns> [DllImport("umf.dll",EntryPoint="fw_beep")] public static extern Int32 fw_beep(Int32 icdev,UInt32 _Msec); /// <summary> /// 读取硬件版本号 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Buff">存放版本号的缓冲区,字符串形式</param> /// <returns>成功则返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_getver")] public static extern Int32 fw_getver(Int32 icdev,StringBuilder _Buff); /// <summary> /// 设置读写器数码管显示模式,关机后可保存设置值 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Mode">显示模式,0--日期(格式"年yy-月mm-日dd");1--时间(格式"时hh-分mm-秒ss)</param> /// <returns>成功则返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_disp_mode")] public static extern Int32 fw_disp_mode(Int32 icdev, Byte _Mode); /// <summary> /// 读取读写器日期、星期、时间 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Time">返回数据,长度为7个字节,格式"年、星期、月、日、时、分、秒"</param> /// <returns>成功则返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_gettime")] public static extern Int32 fw_gettime(Int32 icdev, ref Byte _Time); /// <summary> /// 设置读写器时间 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Time">长度为7个字节,长度为7个字节,格式"年、星期、月、日、时、分、秒"</param> /// <returns>成功则返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_settime")] public static extern Int32 fw_settime(Int32 icdev, ref Byte _Time); /// <summary> /// 设置读写器数码管的控制模式 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Mode">显示模式,0--计算机控制,1--读写器控制</param> /// <returns>成功则返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_ctl_mode")] public static extern Int32 fw_ctl_mode(Int32 icdev, Byte _Mode); /// <summary> /// LED数码管显示任意数字 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Len">显示数字的个数</param> /// <param name="_DispStr">要显示的数字</param> /// <returns>成功则返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_LED_disp8")] public static extern Int32 fw_LED_disp8(Int32 icdev, Byte _Len, ref Byte _DispStr); /// <summary> /// 设置LCD背光点亮或熄灭 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Bright">点亮或熄灭的标志,15-点亮,0-熄灭</param> /// <returns>成功则返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_lcd_setbright")] public static extern Int32 fw_lcd_setbright(Int32 icdev, Byte _Bright); /// <summary> /// 设置LCD显示的字符串 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <param name="_Digit">要显示的字符串</param> /// <returns>成功则返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_lcd_dispstr")] public static extern Int32 fw_lcd_dispstr(Int32 icdev, ref Byte _Digit); /// <summary> /// 清空LCD显示的字符 /// </summary> /// <param name="icdev">通讯设备标识符</param> /// <returns>成功则返回0</returns> [DllImport("umf.dll", EntryPoint = "fw_lcd_dispclear")] public static extern Int32 fw_lcd_dispclear(Int32 icdev); }
那些年,用C#调用过的外部Dll
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。