我尝试使用以下代码加载我的插件:
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 :(得分: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,这阻止了我的插件正确加载!