Qt 加载动态库DLL

1. 首先生成DLL,或者有现成的。

#ifndef TEST_H
#define TEST_H

#include "test_global.h"
#include <QString>
#include <iostream>

 
 

/* 在Windows上,还必须使用__declspec(dllexport)编译器指令从DLL显式导出该函数 */
#ifdef Q_OS_WIN
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif

extern "C"
{

void hello(void *in, void *out);
}
#endif // TEST_H
#include "test.h"

MY_EXPORT void hello(void *in, void *out)
{
    memcpy((char *)out, (char *)in, 512);
}


2.调用代码

#include "mainwindow.h"
#include <QApplication>
#include <QLibrary>
#include <QDebug>

typedef int (__stdcall *lib_form)(void *, void *);  //声明一个函数类型
lib_form dll_hello;


bool LoadDll()
{
    QString input = "hello!";
    QString out = "";
    char outbuf[512] = {0};

    /* 获取路径 */
    QString DllPath = "C:/Users/flysea/Documents/test5/MyDebug/test5";

    /* 加载函数 */
    QLibrary Lib;
    Lib.setFileName(DllPath);
    if(!Lib.load())
    {
        qDebug() << "Load fail";
        return false;
    }

    dll_hello = (lib_form)Lib.resolve("hello");
    if(!dll_hello)
    {
        qDebug() << "Lib resolve fail";
        return false;
    }

    /* 执行 */
    QByteArray pInput = input.toUtf8();
    dll_hello(pInput.data(), outbuf);
    out = QString::fromLocal8Bit(outbuf);       //返回值->转换字符格式

    qDebug() << out;


    return true;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    LoadDll();

    return a.exec();
}



猜你喜欢

转载自blog.csdn.net/sea_snow/article/details/73468140
今日推荐