龙空技术网

Qt显式调用动态库

alexabc3000 15

前言:

如今兄弟们对“java调用c的动态库”可能比较关怀,兄弟们都想要分析一些“java调用c的动态库”的相关知识。那么小编在网摘上汇集了一些有关“java调用c的动态库””的相关内容,希望各位老铁们能喜欢,朋友们快快来了解一下吧!

1. 创建动态库

在Qt主界面,点击“文件”->“新建文件或项目”

选择“Library”、“C++ Library”,点击“Choose...”

指定库名为“MyDll1”,选择“qmake”后,一路默认,完成库的创建工作。

完成创建后,有4个文件:MyDll1_global.h、mydll1.h、mydll1.cpp、MyDll1.pro。

2. 添加库接口函数

在文件MyDll1_global.h中添加库接口函数add,添加后该文件中的代码如下:

#ifndef MYDLL1_GLOBAL_H

#define MYDLL1_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(MYDLL1_LIBRARY)

# define MYDLL1_EXPORT Q_DECL_EXPORT

#else

# define MYDLL1_EXPORT Q_DECL_IMPORT

#endif

/// 添加的接口函数

extern "C" {

MYDLL1_EXPORT int add(int a, int b);

}

///

#endif // MYDLL1_GLOBAL_H

在“mydll1.cpp”添加函数的实现,代码如下:

extern "C" {

int add(int a, int b) {

return a + b;

}

}

3. 显式调用动态库

使用Qt新建一个应用程序,在其main函数中显示调用动态库,具体代码如下:

#include <QApplication>

#include <QLibrary> // 添加

#include <QDebug> // 添加

// 声明函数指针类型

typedef int (*AddFunction)(int, int);

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

////// 显式调用动态库.

// 手工复制库文件到可执行文件所在目录

QLibrary library("./MyDll.dll"); // Windows示例路径

// QLibrary library("./MyDll.so"); // Linux示例路径

if (!library.load()) {

qDebug() << "无法加载库!";

return 0;

}

// 获取函数指针

AddFunction addFunction = (AddFunction)library.resolve("add");

if (!addFunction) {

qDebug() << "无法解析函数!";

library.unload(); // 卸载库

return 0;

}

// 调用函数并输出结果

int result = addFunction(3, 5);

qDebug() << "3 + 5 =" << result;

// 卸载库(可选)

library.unload();

///

MainWindow w;

w.show();

return a.exec();

}

参考资料:

(1) The future is written with Qt.

(2) QLibrary Class.

(3) qt 关于动态链接库,

标签: #java调用c的动态库 #java调用c动态库的指针