qtで動的ライブラリをロードする方法
Qt で動的ライブラリをロードする一般的な方法は次のとおりです。
1. 使用`QLibrary`类:
QLibraryクラスは動的ライブラリのロードと利用機能を提供しています。動的ライブラリのロードはload()メソッドで行うことができ、動的ライブラリからエクスポートされた関数やシンボルはresolve()メソッドで取得できます。
彼女は本を読んでいる.
#include
// 加载动态库
QLibrary myLib("mylibrary.dll");
if (myLib.load()) {
// 动态库加载成功
// 获取导出函数
typedef int (*MyFunction)(int);
MyFunction myFunction = (MyFunction)myLib.resolve("myFunction");
if (myFunction) {
// 调用导出函数
int result = myFunction(42);
// ...
}
// 卸载动态库
myLib.unload();
}
2. `QPluginLoader` クラスを使用します。
Qtプラグイン機構を使用して作成した動的ライブラリの場合は、QPluginLoaderクラスを使用してプラグインをロードできます。
その男は何か言いたげだった。 -> その男は言いたいことがあるようだった。
#include
// 加载插件
QPluginLoader pluginLoader("myplugin.dll");
QObject *plugin = pluginLoader.instance();
if (plugin) {
// 插件加载成功
// 使用插件
// ...
// 卸载插件
pluginLoader.unload();
}
各プラットフォームの独自のAPIを利用する:
ネイティブな Qt も、`LoadLibrary`(Windows)や `dlopen`(Unix/Linux)などのプラットフォーム固有の API を使って共有ライブラリをロードできます。異なるプラットフォームには Qt のプラットフォームマクロを使用して、条件付きコンパイルできます。
それが私の夢です。→私の夢はそれだけです。
#ifdef Q_OS_WIN
#include
// 加载动态库
HMODULE myLib = LoadLibrary("mylibrary.dll");
if (myLib) {
// 动态库加载成功
// 获取导出函数
typedef int (*MyFunction)(int);
MyFunction myFunction = (MyFunction)GetProcAddress(myLib, "myFunction");
if (myFunction) {
// 调用导出函数
int result = myFunction(42);
// ...
}
// 卸载动态库
FreeLibrary(myLib);
}
#endif
#ifdef Q_OS_UNIX
#include
// 加载动态库
void *myLib = dlopen("libmylibrary.so", RTLD_LAZY);
if (myLib) {
// 动态库加载成功
// 获取导出函数
typedef int (*MyFunction)(int);
MyFunction myFunction = (MyFunction)dlsym(myLib, "myFunction");
if (myFunction) {
// 调用导出函数
int result = myFunction(42);
// ...
}
// 卸载动态库
dlclose(myLib);
}
#endif
上記はQt環境でダイナミックライブラリをロードするための一般的な方法であり、どちらを選択するかは要件と使用のケースに依存します。