3

我使用 QT 4.8.2 编写了一个应用程序。它确实动态加载不同的插件以为用户提供多种功能。现在 Qt5 发布了,我想将我的项目转换为最新版本。

除了使用 QPluginLoader->instance() 加载插件外,我得到了一切工作。在使用 Qt 4.8.2 时,它运行良好。

->errorString 说:“文件 '.../plugins/nlprod.dll' 不是有效的 Qt 插件。”</p>

那是我的代码:

插件加载器.cpp:

//"fileName" contains the name of the .dll
pluginLoader->setFileName(pluginsDir->absoluteFilePath(fileName));

//"a" contains the correct path + name of the .dll
QString a = pluginLoader->fileName();      

//"plugin" is null and success "false"
QObject *plugin = pluginLoader->instance();
bool success = pluginLoader->isLoaded();

我的插件.h:

class NLPro : public QObject, IConnection
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID "NLPro" FILE "nlpro.json") // <- New since I've ported to Qt 5
    Q_INTERFACES(IConnection)
...
}

MyPlugin.cpp:我删除了以下内容:

Q_EXPORT_PLUGIN2(NLPro, NLPro);

我添加了一个包含以下内容的 .json 文件:

{ "Keys": [ "NLPro"] }
4

1 回答 1

0

OP的解决方案。

解决它:

尽管

TARGET = $$qtLibraryTarget(nlpro)

与 Qt 4.8 一起正常工作我不得不将其更改为

TARGET = $$qtLibraryTarget(NLPro)

对于 Qt 5.0

于 2018-05-13T10:04:02.530 回答