#include "mainwindow.h"
#include "./ui_mainwindow.h"
//#include "QDebug"
#include "QLibrary"
#include "QMessageBox"
//ID读卡器函数声明
typedef unsigned char (*idr_beep)(unsigned long xms);
typedef unsigned char (*idr_read)(unsigned char *serial);
typedef unsigned char (*idr_read_once)(unsigned char *serial);
typedef unsigned char (*pcdgetdevicenumber)(unsigned char *devicenumber);
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()//让设备发出声
{
unsigned char result;
QLibrary mylib("OUR_IDR.dll");
if (!mylib.load()) //判断是否正确加载
{
QMessageBox::information(NULL, "提示", "动态库没装载!原因是动态库OUR_IDR.dll没放在生成exe文件相同目录下!");
return;
}
idr_beep myidr_beep = (idr_beep)mylib.resolve("idr_beep");
if (myidr_beep == NULL) //是否成功连接上 idr_beep()函数
{
mylib.unload();
QMessageBox::information(NULL, "提示", "请检查函数名是否正确!");
return;
}
result = myidr_beep(30); //这里函数指针调用dll中的idr_beep() 函数
mylib.unload();
if(result > 0)
{
if(result == 23)
{
QMessageBox::information(NULL, "提示", "机器没连上或者驱动没下载");
}
else
{
QMessageBox::information(NULL, "提示", "错误代码:" + QString::number(result));
};
}
//qDebug()<<result;
}
void MainWindow::on_pushButton_2_clicked() //读出设备全球唯一的设备编号,作为加密狗使用
{
unsigned char devicenumber[4];
unsigned char result;
QLibrary mylib("OUR_IDR.dll"); //动态库加载
if (!mylib.load()) //判断是否正确加载
{
QMessageBox::information(NULL, "提示", "动态库没装载!原因是动态库OUR_IDR.dll没放在生成exe文件相同目录下!");
return;
}
pcdgetdevicenumber mypcdgetdevicenumber = (pcdgetdevicenumber)mylib.resolve("pcdgetdevicenumber");
if (mypcdgetdevicenumber == NULL) //是否成功连接上 pcdgetdevicenumber()函数
{
mylib.unload();
QMessageBox::information(NULL, "提示", "请检查函数名是否正确!");
return;
}
result = mypcdgetdevicenumber(devicenumber);
mylib.unload();
if(result > 0)
{
if(result == 23)
{
QMessageBox::information(NULL, "提示", "机器没连上或者驱动没下载");
}
else
{
QMessageBox::information(NULL, "提示", "错误代码:" + QString::number(result));
}
}
else
{
QMessageBox::information(NULL, "提示", QString::asprintf("设备号十六进制数:%02X-%02X-%02X-%02X", devicenumber[0],devicenumber[1],devicenumber[2],devicenumber[3]));
//QMessageBox::information(NULL, "提示", "设备号十六进制:" + QString::number(devicenumber[0],16) + "-"+ QString::number(devicenumber[1],16) + "-" + QString::number(devicenumber[2],16) + "-" + QString::number(devicenumber[3],16));
}
qDebug()<<result;
}
void MainWindow::on_pushButton_3_clicked() //读卡
{
unsigned char serial[5];
unsigned char result;
QLibrary mylib("OUR_IDR.dll"); //动态库加载
if (!mylib.load()) //判断是否正确加载
{
QMessageBox::information(NULL, "提示", "动态库没装载!原因是动态库OUR_IDR.dll没放在生成exe文件相同目录下!");
return;
}
idr_read myidr_read = (idr_read)mylib.resolve("idr_read");
if (myidr_read == NULL) //是否成功连接上 idr_read()函数
{
mylib.unload();
QMessageBox::information(NULL, "提示", "请检查函数名是否正确!");
return;
}
result = myidr_read(serial);
if(result > 0)
{
mylib.unload();
if(result == 8)
{
QMessageBox::information(NULL, "提示", "卡不在感应区内或者寻找不到卡");
}
else if(result == 23)
{
QMessageBox::information(NULL, "提示", "机器没连上或者驱动没下载");
}
else if(result == 24)
{
QMessageBox::information(NULL, "提示", "通讯超时");
}
else
{
QMessageBox::information(NULL, "提示", "错误代码:" + QString::number(result));
}
}
else
{
ui->textEdit->setText(QString::asprintf("%02X%02X%02X%02X%02X",serial[0],serial[1],serial[2],serial[3],serial[4]));
idr_beep myidr_beep = (idr_beep)mylib.resolve("idr_beep");
if (myidr_beep == NULL) //是否成功连接上 idr_beep()函数
{
mylib.unload();
QMessageBox::information(NULL, "提示", "请检查函数名是否正确!");
return;
}
myidr_beep(30); //这里函数指针调用dll中的idr_beep() 函数
mylib.unload();
}
}
void MainWindow::on_pushButton_4_clicked() //仅读一次,重新取放卡才能读到第二次[返回
{
unsigned char serial[5];
unsigned char result;
QLibrary mylib("OUR_IDR.dll"); //动态库加载
if (!mylib.load()) //判断是否正确加载
{
QMessageBox::information(NULL, "提示", "动态库没装载!原因是动态库OUR_IDR.dll没放在生成exe文件相同目录下!");
return;
}
idr_read_once myidr_read_once = (idr_read_once)mylib.resolve("idr_read_once");
if (myidr_read_once == NULL) //是否成功连接上 idr_read_once()函数
{
mylib.unload();
QMessageBox::information(NULL, "提示", "请检查函数名是否正确!");
return;
}
result = myidr_read_once(serial);
if(result > 0)
{
mylib.unload();
if(result == 23)
{
QMessageBox::information(NULL, "提示", "机器没连上或者驱动没下载");
}
else if(result == 24)
{
QMessageBox::information(NULL, "提示", "通讯超时");
}
else if(result == 8)
{
QMessageBox::information(NULL, "提示", "卡不在感应区内或者寻找不到卡");
}
else
{
QMessageBox::information(NULL, "提示", "错误代码:" + QString::number(result));
}
}
else
{
ui->textEdit->setText(QString::asprintf("%02X%02X%02X%02X%02X",serial[0],serial[1],serial[2],serial[3],serial[4]));
idr_beep myidr_beep = (idr_beep)mylib.resolve("idr_beep");
if (myidr_beep == NULL) //是否成功连接上 idr_beep()函数
{
mylib.unload();
QMessageBox::information(NULL, "提示", "请检查函数名是否正确!");
return;
}
myidr_beep(30); //这里函数指针调用dll中的idr_beep() 函数
mylib.unload();
}
}