Absturz beim Zugriff auf Kartenleser ST-2052
-
Hi,
ich versuche über folgendens c++ Programm einen Kartenleser (ST-2052) anzusprechen um die Karte auszulesen. Doch kommt am Ende das Windows Fehlerbericht senden Fenster und das Programm beendet sich mit:Rückgabewert -1073741819
Kann mir jemand helfen?#include "krv.h" #include "ui_krv.h" #include <windows.h> #include <stdio.h> #include <conio.h> #define MAXMEM 3000 typedef char (*CT_INIT) (USHORT, USHORT); typedef char (*CT_DATA) (USHORT, UCHAR*, UCHAR*, USHORT, UCHAR*, USHORT*, UCHAR*); typedef char (*CT_CLOSE) (USHORT); HINSTANCE hDLL; CT_INIT CT_init; CT_DATA CT_data; CT_CLOSE CT_close; int load_date() { return(0); } krv::krv(QWidget *parent) : QMainWindow(parent), ui(new Ui::krv) { ui->setupUi(this); } krv::~krv() { delete ui; } void krv::on_pushButton_clicked() { unsigned char sad, dad; unsigned char response [MAXMEM]={0}; unsigned short int ctn, lenr; char res; ctn=1; hDLL = LoadLibrary(L"ctpcsc32kv.dll"); CT_init = (CT_INIT)GetProcAddress(hDLL,"CT_init"); CT_data = (CT_DATA)GetProcAddress(hDLL,"CT_data"); CT_close = (CT_CLOSE)GetProcAddress(hDLL,"CT_close"); CT_init(ctn,0); lenr=sizeof(MAXMEM); unsigned char COMMANDS[3][5] = {0x20, 0x11, 0x00, 0x00, 0x00, //ATR Reset 0x20, 0x13, 0x00, 0x81, 0x00, //GetStatus 0x20, 0x12, 0x01, 0x00, 0x00}; // REQUEST_ICC unsigned short COMMANDS_LEN[3] = {4, 5, 5}; sad=2; dad=1; res=CT_data(ctn,&dad,&sad,COMMANDS_LEN[0], COMMANDS[0],&lenr,response); if(res!=0){ui->textEdit->setPlainText("Reset Fail");} if (response[lenr - 2] == 0x90 && response[lenr - 1] == 0x00) { res=CT_data(ctn,&dad,&sad,COMMANDS_LEN[1], COMMANDS[1],&lenr,response); if(res!=0){ui->textEdit->setPlainText("GetStatus Fail");} res=CT_data(ctn,&dad,&sad,COMMANDS_LEN[2], COMMANDS[2],&lenr,response); if(res<2){ui->textEdit->setPlainText("REQUEST_ICC Fail");} }else{ ui->textEdit->setPlainText("Funktioniert"); } ui->textEdit->setPlainText(reinterpret_cast < const char* >(response)); res=CT_close(ctn); FreeLibrary (hDLL); }
-
Benutze einen Debugger, dann sollte mindestens klar werden, an welcher Stelle der Fehler auftritt. Wahrscheinlich wird dann auch das Warum klar. Mindestens die genaue Stelle des Fehlers wäre aber nötig, damit dir jemand sinnvoll helfen kann, die Fehlernummer nützt nicht viel.