Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Chipdrive an Com Schnittstelle ansprechen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
21.03.2003, 09:05 Uhr
~Loki
Gast


Hallo zusammen,

ich möchte eine Application schreiben die einen Chipdrive (Towitoko) ausließt.
Hat einer schon damit Erfahrungen gemacht und weißwie das geht?

MfG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.03.2003, 18:03 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Hast du das API von Towitoko?
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.03.2003, 07:21 Uhr
Tommix



Hallo,
z.B. bei Conrad gibts die Toolbox von Towitoko (10,20 €, Best.-Nr. 962732-88) mit Beispielen.
Gruß, Tommix

Dieser Post wurde am 22.03.2003 um 07:21 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.03.2003, 09:25 Uhr
~Loki
Gast


Ja hab ich
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.03.2003, 09:26 Uhr
~Loki
Gast


aber kann mir jetzt jemand weiterhelfen, das developmentpack mit Beispielen und so, hab ich bereits, mir fehlt nur der Ansatz wie ich anfangen soll. Hab sowas noch nie gemacht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.03.2003, 12:54 Uhr
Tommix



Hallo,
ich schieb heute abend mal mein Testprog hier her, was genau willst Du denn machen?

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.03.2003, 20:41 Uhr
Tommix



Hallo,
ich noch mal - Ich muß das ganze erst noch mal ausgraben. Hoffe Du hast Zeit bis zum Wochenende.
Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.03.2003, 21:23 Uhr
~Loki
Gast


Danke Tommix

ich will so ne Art login für ne Software per Chipkarte. Also das man Zugang zu einer Software nur mit einer Chipkarte bekommt. Hoffe hab es verständlich ausgedrückt Ich brauch auch nur den Ansatz, z.b wie schreib ich die .dll die auf den Chipdrive zugreift. In der Doku von Towitoko stehen zwar die ganzen Befehle aber ich weiß nicht wie ich die in ein MFC programm einbaue. Wäre dir sehr sehr dankbar und klar hab ich Zeit.

Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.03.2003, 20:28 Uhr
Tommix



Hallo,
der Aufruf an sich ist nicht so wild:

C++:
#include "iostream"
#include <windows.h>

using namespace std;

HINSTANCE hDll;
long (__stdcall * SCardComand)(long *handle, char *Cmd, long *CmdLen, char *DataIn, long *DataInLen, char *DataOut, long *DataOutLen);
long CmdLen,DataInLen,DataOutLen;
char *Cmd,*DataIn,*DataOut;

void test()
{
    hDll=LoadLibrary("scard32.dll");
    if(hDll!=NULL)
    {
        SCardComand=(long (__stdcall * )(long *handle, char *Cmd, long *CmdLen, char *DataIn, long *DataInLen, char *DataOut, long *DataOutLen))GetProcAddress(hDll,"SCardComand");

        Cmd=(char*)malloc(255);
        DataIn=(char*)malloc(255);
        DataOut=(char*)malloc(255);
        long ret;
        strcpy(Cmd,    "System,Info");
        strcpy(DataIn,"");
        strcpy(DataOut,"");
        CmdLen=11;
        DataInLen=0;
        DataOutLen=254;
        long handle=0;
        ret=SCardComand(&handle,Cmd,&CmdLen,DataIn,&DataInLen,DataOut,&DataOutLen);
        cout << "Data In:    " << DataIn << endl;
        cout << "Returncode: " << ret << endl;
        cout << "Data Out" << endl << DataOut << endl;
        free(Cmd);
        free(DataIn);
        free(DataOut);
    }
    FreeLibrary(hDll);
}

int main ()
{
    cout << "SmartCard Testprogramm 1" << endl;
    test();
    cout << "Enter! ";
    cin.get();
    return 0;
}


Ich hatte schon mal eine Klasse für das Ganze angefangen. Irgendwie ist da aber mittlerweile ein Fehler reingekommen und es läuft nicht mehr.
Wie gesagt bis zum Wochenende...

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
30.03.2003, 14:03 Uhr
Tommix



Hallo,
so, hier das ganze noch mal als (unvollendete) Klasse. Eigentlich hatte ich vor, für die einzelnen Card-Befehle Memberfunktionen zu schreiben, hab dann das Projekt aber fallenlassen. Das Beispiel gibt ein paar Informationen aus und läßt die LED am Chipdrive blinken. Mit der Dokumentation zum Cardserver sollte klar sein, wie man die anderen Funktionen aufruft.
Kompilieren als Konsolenanwendung mit MFC-Unterstützung!

C++:
////////

// SCard.h: Schnittstelle für die Klasse CSCard.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SCARD_H__B377D108_6274_11D5_85CE_9E2FAADA0B29__INCLUDED_)
#define AFX_SCARD_H__B377D108_6274_11D5_85CE_9E2FAADA0B29__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CSCard  
{
public:
    typedef enum {
        errNoDLL            =   -1,
        errOk                = 0000,        //    ='OK'
        errNoCOMport        = 1001,        //    ='Serielle Schnittstelle ist nicht verfügbar'
        errCOMlocked        = 1002,        //    ='Serielle Schnittstelle ist von einer anderen Anwendung belegt'
        errNoReader            = 1008,        //    ='Kein Lesegerät am Anschluß gefunden'
        errReaderLocked        = 1009,        //    ='Lesegerät ist gesperrt von #1'
        errIncompatibility    = 1010,        //    ='Die Anwendung ist mit diesem Lesegerät nicht kompatibel'
        errNoCard            = 4000,        //    ='Keine Karte im Lesegerät'
        errCardRemoved        = 4001,        //    ='Karte wurde während des Zugriffs entfernt'
        errInvalidCard        = 4002,        //    ='Ungültige Karte im Lesegerät'
        errCantEject        = 4004,        //    ='Karte konnte nicht ausgeworfen werden'
        errInvalidCommand    = 1200,        //    ='Befehl unbekannt'
        errNotSupported        = 1201,        //    ='Befehl mit dieser Karte nicht möglich'
        errBadTerminal        = 1202,        //    ='Befehl mit diesem Terminal nicht möglich'
        errBadParameter        = 1203,        //    ='Befehlsparameter ungültig'
        errNoAccess            = 1310,        //    ='Kartenzugriff fehlgeschlagen'
        errWrongPin            = 1311,        //    ='PIN-Fehler! Noch #1 Versuch(e)'
        errNoServer            = 2000,        //    ='Server nicht verfügbar'
                                        //    Diese Texte müssen so übersetzt werden, daß sie kombiniert werden können:
                                        //    'TerminalName'+9000 -> CHIPDRIVE micro an COM3
                                        //            9001+9000 -> Suche läuft an COM3
                                        //            9002+9000 -> Kein Gerät an COM3
        errOnCOM            = 9000,        //    ='an COM#1'
        errSearching        = 9001,        //    ='Suche läuft'
        errNoDevice            = 9002,        //    ='Kein Gerät'

        errTooLong            = 10000        //    Kommando / Daten zu lang
    } ErrCode;

    ErrCode ExecuteCommand(const CString& command);
    ErrCode ExecuteCommand(const CString& command, CString& dataOut);
    ErrCode ExecuteCommand(const CString& command, const CString& dataIn, CString& dataOut, long handle = 0);
    
    CSCard();
    virtual ~CSCard();

private:
    long (__stdcall *m_pSCardCommand)(long *handle, char *cmd, long *pCmdLen, char *dataIn, long *pDataInLen,
            char *dataOut, long *pDataOutLen);

    HINSTANCE m_hDll;
    ErrCode m_lastError;
    ErrCode m_error;

};

#endif // !defined(AFX_SCARD_H__B377D108_6274_11D5_85CE_9E2FAADA0B29__INCLUDED_)

////////

// SCard.cpp: Implementierung der Klasse CSCard.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SCard.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#define MAX_STR_LEN 256

//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////

CSCard::CSCard()
{
    m_hDll = LoadLibrary("scard32.dll");
    if (m_hDll)
    {
        m_pSCardCommand = reinterpret_cast<long (__stdcall *)(long *pHandle, char *cmd, long *pCmdLen,
            char *dataIn, long *pDataInLen, char *dataOut, long *pDataOutLen)>
            (GetProcAddress(m_hDll,"SCardComand"));
        
        m_lastError = m_error = errOk;
    }
    else
    {
        m_pSCardCommand = NULL;
        m_lastError = m_error = errNoDLL;
    }

}

CSCard::~CSCard()
{
    if (m_hDll)    FreeLibrary(m_hDll);
}

CSCard::ErrCode CSCard::ExecuteCommand(const CString& command, const CString& dataIn,
                                       CString& dataOut, long handle /* = 0 */)
{
    if ((command.GetLength() < MAX_STR_LEN) && (dataIn.GetLength() < MAX_STR_LEN))
    {
        if (m_pSCardCommand)
        {
            char cmd[MAX_STR_LEN];
            strcpy(cmd, command);
            long cmdLen = strlen(cmd);
            
            char dIn[MAX_STR_LEN];
            strcpy(dIn, dataIn);
            long inLen = strlen(dIn);

            char dOut[MAX_STR_LEN] = "";
            long outLen = MAX_STR_LEN-1;

            long ret = m_pSCardCommand(&handle, cmd, &cmdLen, dIn, &inLen, dOut, &outLen);
            Sleep(100);
            dataOut = dOut;
            
            if ((m_error = static_cast<ErrCode>(ret)) != errOk)
                m_lastError = m_error;
            
            return m_error;
        }
        else
        {
            return m_lastError = m_error = errNoDLL;
        }
    }
    else
    {
        return m_lastError = m_error = errTooLong;
    }
}

CSCard::ErrCode CSCard::ExecuteCommand(const CString& command, CString& dataOut)
{
    return ExecuteCommand(command, "", dataOut);
}

CSCard::ErrCode CSCard::ExecuteCommand(const CString& command)
{
    CString dataOut;
    return ExecuteCommand(command, "", dataOut);
}

////////

// SCardTest2.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include "SCard.h"
#include "SCardTest2.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// Das einzige Anwendungsobjekt

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    // MFC initialisieren, Ausgabe und Fehlermeldung bei Fehlern
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
        // ZU ERLEDIGEN: Fehlercode gemäß Ihren Anforderungen ändern
        cerr << _T("Fatal Error: MFC initialization failed") << endl;
        nRetCode = 1;
    }
    else
    {
        // ZU ERLEDIGEN: Anwendungsverhalten hier festlegen.
        CString out;
        CSCard card;
        
        card.ExecuteCommand("System,Info", out);
        cout << (const TCHAR*)out<< endl;

        card.ExecuteCommand("Device,Info", out);
        cout << (const TCHAR*)out<< endl;

        card.ExecuteCommand("Device,SetLed,01");
        cin.get();
        card.ExecuteCommand("Device,SetLed,0");
    }

    return nRetCode;
}



Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: