我有两个 两个动态库 VC6.0++开发,编译成Release实体 OUR_IDR.dll 和 IDUSB.dllOUR_IDR.dll :
函数名:idr_read
功能: 寻卡并返回该卡的序列号
原始声明 unsigned char __stdcall idr_read (unsigned char *serial)
输入: 形参*serial只需指向一个至少已分配了5个char空间的可写数组 unsigned char *指针, serial的下标由0开始。Serial数组的内容无需赋值,因为此数组仅用于返回值。
返回: 返回unsigned char值,并将寻到的卡的序列号传值到*serial数组。public class LoadLibraryDll
{
/// <summary>
/// 载入DLL,读卡,返回卡信息
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
//以C元素指针,从托管到非托管进行封装处理
[DllImport("OUR_IDR.dll", EntryPoint = "idr_read")]
public static extern byte idr_read([MarshalAs(UnmanagedType.LPArray)] byte[] serial); [DllImport("OUR_IDR.dll")]
public static extern byte pcdgetdevicenumber([MarshalAs(UnmanagedType.LPArray)] byte[] devicenumbe);
}public class ReturnCardRead
{
//创建数据缓存区间
byte[] cardNo = new byte[10];
//返回状态消息
string statusMsg = null;
/// <summary>
/// 读取卡号
/// </summary>
/// <returns></returns>
public String IdrRead()
{
try
{
//调用非托管DLL方法,并返回处理结果
byte readCardInfo = LoadLibraryDll.idr_read(cardNo);
//数据分割
string strValue = null;
//读取缓存控件大小
for (int i = 0; i < cardNo.Length; i++)
{
//每个空间的数据转换字符串
strValue += cardNo[i].ToString(); if (strValue.Length == 1)
strValue = "0" + strValue;
strValue += strValue;
}
//截取
strValue = strValue.Substring(2, 8);
//转化成非0开头的数字
int intTemp = Convert.ToInt32(strValue, 16);
strValue = intTemp.ToString(); //#define ERR_REQUEST 8//寻不到卡
//#define ERR_NONEDLL 21//没有动态库
//#define ERR_DRIVERORDLL 22//动态库或驱动程序异常
//#define ERR_DRIVERNULL 23//驱动程序错误或尚未安装
//#define ERR_TIMEOUT 24//操作超时,一般是动态库没有反映
//#define ERR_TXSIZE 25//发送字数不够
//#define ERR_TXCRC 26//发送的CRC错
//#define ERR_RXSIZE 27//接收的字数不够
//#define ERR_RXCRC 28//接收的CRC错
但是每次调用都出问题
返回信息: 23 但是驱动确实是放在 project/Bin/Debug 下了 Bin 下也放了
在VC++ 下测试是通过的..
还有就是每次我怎么能一刷卡就调用到这个方法
要写个监视么?
PS: 不要太关注于头像...那只是一张图片而已...
函数名:idr_read
功能: 寻卡并返回该卡的序列号
原始声明 unsigned char __stdcall idr_read (unsigned char *serial)
输入: 形参*serial只需指向一个至少已分配了5个char空间的可写数组 unsigned char *指针, serial的下标由0开始。Serial数组的内容无需赋值,因为此数组仅用于返回值。
返回: 返回unsigned char值,并将寻到的卡的序列号传值到*serial数组。public class LoadLibraryDll
{
/// <summary>
/// 载入DLL,读卡,返回卡信息
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
//以C元素指针,从托管到非托管进行封装处理
[DllImport("OUR_IDR.dll", EntryPoint = "idr_read")]
public static extern byte idr_read([MarshalAs(UnmanagedType.LPArray)] byte[] serial); [DllImport("OUR_IDR.dll")]
public static extern byte pcdgetdevicenumber([MarshalAs(UnmanagedType.LPArray)] byte[] devicenumbe);
}public class ReturnCardRead
{
//创建数据缓存区间
byte[] cardNo = new byte[10];
//返回状态消息
string statusMsg = null;
/// <summary>
/// 读取卡号
/// </summary>
/// <returns></returns>
public String IdrRead()
{
try
{
//调用非托管DLL方法,并返回处理结果
byte readCardInfo = LoadLibraryDll.idr_read(cardNo);
//数据分割
string strValue = null;
//读取缓存控件大小
for (int i = 0; i < cardNo.Length; i++)
{
//每个空间的数据转换字符串
strValue += cardNo[i].ToString(); if (strValue.Length == 1)
strValue = "0" + strValue;
strValue += strValue;
}
//截取
strValue = strValue.Substring(2, 8);
//转化成非0开头的数字
int intTemp = Convert.ToInt32(strValue, 16);
strValue = intTemp.ToString(); //#define ERR_REQUEST 8//寻不到卡
//#define ERR_NONEDLL 21//没有动态库
//#define ERR_DRIVERORDLL 22//动态库或驱动程序异常
//#define ERR_DRIVERNULL 23//驱动程序错误或尚未安装
//#define ERR_TIMEOUT 24//操作超时,一般是动态库没有反映
//#define ERR_TXSIZE 25//发送字数不够
//#define ERR_TXCRC 26//发送的CRC错
//#define ERR_RXSIZE 27//接收的字数不够
//#define ERR_RXCRC 28//接收的CRC错
但是每次调用都出问题
返回信息: 23 但是驱动确实是放在 project/Bin/Debug 下了 Bin 下也放了
在VC++ 下测试是通过的..
还有就是每次我怎么能一刷卡就调用到这个方法
要写个监视么?
PS: 不要太关注于头像...那只是一张图片而已...
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货