QT 动态加载dll

最近在调用卡尔的库函数时候,发现他们仅仅提供了一个dll,于是百度调研QT动态加载dll的方式,在调用成功后分析给大家。

动态调用。在使用的时候才会加载dll进来,使用QT本身自己的加载机制,利用QLibrary进行动态加载。
 

typedef void (*CB_AnswerData)(const char *pBuf,int iLen);
typedef int (*FunCardcallback)(CB_AnswerData );

void cardInfoCallback(const char *pBuf,int iLen)
{
}

void MainWindow::on_pushButton_3_clicked()
{
    if(true)
    {
        QLibrary lib("KeUsbHid.dll");

        if(lib.load())
        {

            qDebug() << "load DLL succeed";

            //usb回调
            try
            {
                FunUSBcallback usbBack=(FunUSBcallback)lib.resolve("_KERECEIVER_SetUSBStatusCallBack@4");
               
            }
            catch (...)
            {
                qDebug() << "usb   catch---------------------catch";
            }
        }
        else
        {

        }
    }
}

注意事项:

(1)dll中的函数我们在调用过程中,需要在调用类中重新写一个带有形参个数和类型都一样的函数,就像本文的FunCardcallback,它在这里是作为回调函数使用的。

(2)包含头文件#include "QLibrary"。

(3)把调用的dll放在exe所在路径中。

(4)分享一个小工具用于查看dll的函数原型,Stud_PE.exe。这个可以查看dll的导出表。

你可能感兴趣的:(c++,qt5)