main.dll
のメインとヘルパーの 2 つの Qt プラグインがあります。 helper.dll
を読み込んでいます . main.dll
を正常にロードできました QPluginLoader
で main.dll
の両方の場合 および helper.dll
は同じフォルダにあります。 helper.dll
のとき が存在せず、main.dll
を読み込もうとしています 例外がスローされます。それは理解できる原因です helper.dll
見つからない。私の仕事は、アプリをクラッシュさせるのではなく、スローされた例外を正常にキャッチすることです。ここでのデバッグ中は、Qt Creator が表示するものです:
次のコードは問題を解決していないので、別のことをする必要があります...
std::exception_ptr eptr;
QPluginLoader pluginLoader(packagePath);
try
{
pluginLoader.load();
}
catch(...)
{
eptr = std::current_exception();
}
答え:
私はこれを解決することができました。問題は、私の Qt アプリケーションがそれ自体をデプロイしていなかったことです (Qt 作成者から独立して実行する必要がある場合に、Qt アプリケーションが実行しなければならないことです。 .pro
にスクリプトを追加しました)。 Qt Creator プロジェクトのファイル。これを実行すると、クラッシュは発生しませんが、QPluginLoader::errrorString()
を呼び出すことによってわかりやすいエラー メッセージが生成されます。 、 QPluginLoader::load()
への呼び出しの場合 false を返します。
私のコードは次のようになります:
QPluginLoader pluginLoader(m_packagePath);
bool bLoaded = pluginLoader.load();
if (bLoaded)
{
QObject* plugin = pluginLoader.instance();
m_metaObject = plugin->metaObject();
if (m_metaObject == nullptr)
{
qCritical() << "Unable to obtain entry class of input plugin. Please check your plugin.";
return false;
}
}
else
{
qCritical() << "Message from Qt plugin loader:";
qCritical() << pluginLoader.errorString();
qCritical() << "Please make sure your input Qt plugin along with its dependencies are deployed with winqtdeploy.exe and in the same folder as your plugin.";
exit(-1);
}
ここで見つけることができる別の Stackoverflow 投稿からデプロイ スクリプトを取得しました:
Qt Creator での依存ファイルの自動コピー