ネイティブのDLLでカプセル化されたクラスをQtから呼び出す方法
Qtでラップされたクラスを呼び出すには、QLibraryクラスを使用してDLLファイルをロードし、QLibrary::resolve()メソッドを使用してクラスのポインタを取得します。
以下にQt内包されているクラスをDLLで呼び出す方法を示すサンプルコードです。
#include <QtWidgets>
#include "myclass.h" // 封装好的类的头文件
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLibrary myLib("mydll"); // 加载DLL文件
if(!myLib.load()){
qDebug() << "Failed to load DLL";
return -1;
}
// 获取类的指针
typedef MyClass* (*CreateMyClass)();
CreateMyClass createMyClass = (CreateMyClass)myLib.resolve("createMyClass");
if(!createMyClass){
qDebug() << "Failed to resolve function";
return -1;
}
MyClass* myClass = createMyClass(); // 创建类的实例
myClass->doSomething(); // 调用类的方法
delete myClass; // 删除类的实例
myLib.unload(); // 卸载DLL文件
return app.exec();
}
上記コードでは、まずQLibraryオブジェクトを作成し、そのコンストラクタを介してDLLファイルを読み込みます。次に、QLibrary::resolve()メソッドを使用してカプセル化されたクラスのコンストラクタのアドレスを取得し、関数ポインタを介してクラスのインスタンスを作成します。最後に、クラスのメソッドを呼び出して関連操作を完了できます。クラスのインスタンスの使用が完了したら、インスタンスを削除し、プログラム終了前に DLL ファイルをアンロードすることを忘れないでください。
実際の状況に合わせてコード上のDLLファイル名とクラス名を修正する必要があります。
DLLに含まれるクラスを呼び出すには、DLLファイルがアプリケーションのアーキテクチャ(32ビットアプリケーションは32ビットDLLを使用し、64ビットアプリケーションは64ビットDLLを使用する)と一致していることと、DLLファイルがアプリケーションの現在のディレクトリ、またはシステムパスにあることを確認してください。