2013-07-29 60 views
1

我尝试使用此代码加载我的插件:奇怪的错误:“错误加载插件指定的模块找不到”

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." 
+0

请参阅以下有关调试插件问题的提示:http://qt-project.org/doc/qt-4.8/deployment-plugins.html#debugging-plugins – Mat

+0

@Mat〜>谢谢。你的链接解决了这个问题。 – saeed

回答

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,并且阻止了我的插件正确加载!

+0

哦,多么愚蠢的错误!无论如何谢谢你。第三!选项+垫的链接帮助:D – saeed

+0

不客气! :) – Albert

+6

点4的+1。我总是忘记的东西。 –

相关问题