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環境でダイナミックライブラリをロードするための一般的な方法であり、どちらを選択するかは要件と使用のケースに依存します。

bannerAds