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);
    
    }
    

  • Mod

    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.


Anmelden zum Antworten