LoadLibrary方式加载DLL模版代码

本文提供了一段使用LoadLibrary动态加载DLL的C++代码示例,主要关注如何定义函数指针类型、静态函数指针变量以及初始化和反初始化函数。示例中展示了如何读取身份证信息。
摘要由CSDN通过智能技术生成

本文贴出了我之前写的读取身份证信息的代码。代码使用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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值