奇怪的错误:“错误加载插件。无法找到指定的模块”

时间:2013-07-29 09:24:09

标签: qt

我尝试使用以下代码加载我的插件:

QString path = QFileDialog::getOpenFileName(0);
QPluginLoader loader(path);
AnprPluginInterface *i = qobject_cast< AnprPluginInterface* >(loader.instance());
if (i == NULL )
    QMessageBox::information(0, "this", "error loading plugin." + loader.errorString());
else
    QMessageBox::information(0, "this", "plugin loaded.");

我将插件的绝对路径发送到QPluginLoader,但它说无法找到插件! 错误是:

error loading plugin. "Cannot load library The specified module could not be found." 

1 个答案:

答案 0 :(得分:13)

您确定您的插件使用Q_INTERFACES()宏导出正确的界面吗?如果您收到错误,您有两件事需要检查:

1)loader.instance()返回0:在这种情况下,你必须调查报告的错误。

2)qobject_cast返回0:在这种情况下,我认为问题出在丢失的导出界面中。

另外,你应该考虑两个执行路径都执行相同的代码,所以也许你根本没有得到错误......我指的是:

if (i == NULL )
    // Reports the error
    QMessageBox::information(0, "this", "error loading plugin." + loader.errorString());
else
    // Hey!? WTF!? Repots the error anyway!?
    QMessageBox::information(0, "this", "error loading plugin." + loader.errorString());

3)我忘了:还要检查插件和应用程序是否以相同的方式构建(调试/发布)。

4)顺便说一下,应该检查的另一件事是插件是否带有一些依赖(例如其他动态库)。它发生在我身上,我花了很长时间才弄清楚我错过了一个DLL,这阻止了我的插件正确加载!