本文贴出了我之前写的读取身份证信息的代码。代码使用LoadLibrary函数加载DLL。
旨在以后写动态加载DLL的代码时,参考此代码。
代码如下:
IDCardRead.h
#ifndef _ID_CARD_READ_H_
#define _ID_CARD_READ_H_
typedef int (WINAPI *WLT_GetBmp)(char *sWltFile, int nType);
typedef int (WINAPI *SDT_OpenPort)(int nPort);
typedef int (WINAPI *SDT_ClosePort)(int nPort);
typedef int (WINAPI *SDT_StartFindIDCard)(int nPort, unsigned char *pRAPDU, int nIfOpen);
typedef int (WINAPI *SDT_SelectIDCard)(int nPort, unsigned char *pRAPDU, int nIfOpen);
typedef int (WINAPI *SDT_ReadBaseMsg)(int nPort, unsigned char *pCHMsg, unsigned int *pCHMsgLength,
unsigned char *pPHMsg, unsigned int *pPHMsgLength, int nIfOpen);
typedef struct _ID_CARD_INFORMATION_
{
wchar_t szName[32];
wchar_t szGender[2];
wchar_t szNation[32];
wchar_t szBirth[32];
wchar_t szAddress[128];
wchar_t szIDCode[32];
wchar_t szAuthority[32];
wchar_t szIssueDay[32];
wchar_t szExpiryDay[32];
wchar_t szPhotoPath[128];
}ID_CARD_INFORMATION;
class IDCardRead
{
public:
/**
* return 0; success
* return -1; sdtapi.dll load failed
* return -2; WltRS.dll load failed
* return -3; load function in sdtapi.dll failed
* return -4; load function in WltRS.dll failed
*/
static int Initialize();
static void Uninitialize();
/**
* return 0; success
* return -1; Init parameter is not right, may be Initialize function return failed
* return -2; connect device failed, may be id card reader device is not connected with computer.
*
*/
int ConnectDevice();
/**
* return 0; success
* return -1; Init parameter is not right, may be Initialize function return failed
* return -2; disconnect device failed, may be device is not connect or ConnectDevice function is not
* called before.
*
*/
int DisconnectDevice();
/**
* return 0; success
* return -1; Init parameter is not right, may be Initialize function return failed
* return -2; detect card failed. no card.
* return -3; find card, but select card failed
* return -4; device is not connect
*
*/
int DetectCard();
//trim right space;
void TrimRight(wchar_t *sInput);
void GetNationFromCode(wchar_t *sNation, int nNationCode);
/**
* return 0; success
* return -1; Init parameter is not right, may be Initialize function return failed
* return -2; pInfo is NULL
* return -3; device is not connect
* return -4; read base information failed
*/
int GetCardInformation(ID_CARD_INFORMATION *pInfo);
public:
IDCardRead();
~IDCardRead();
private:
static WLT_GetBmp ms_fpWLT_GetBmp;
static SDT_OpenPort ms_fpSDT_OpenPort;
static SDT_ClosePort ms_fpSDT_ClosePort;
static SDT_StartFindIDCard ms_fpSDT_StartFindIDCard;
static SDT_SelectIDCard ms_fpSDT_SelectIDCard;
static SDT_ReadBaseMsg ms_fpSDT_ReadBaseMsg;
static HMODULE ms_hSDTAPI;
static HMODULE ms_hWltRS;
int m_nDevicePort;
};
#endif//_ID_CARD_READ_H_
IDCardRead.cpp
#include "stdafx.h"