环境:win11 + vs2015 + qt5.12.12
问题描述:确保插件代码正确的情况下,无法解析插件接口(即QPluginLoader类的instance(); 返回为空)。
问题现象:1、qt5.12.12的debug下无法解析;2、release下禁止优化模式无法解析。
问题原因:qt5.12.12工程不能使用禁止优化模式“已禁用(/Od)”。
解决方法: 在debug或release下工程属性->C/C++->优化->优化的值修改为“使大小最小化 (/O1)”、“使速度最大化 (/O2)”、“完全优化 (/Ox)”三种都可以(非“已禁用(/Od)”选项即可)。
正确插件代码如下:
// 接口类
class TestInterface
{
public:
virtual ~TestInterface() {}
virtual int test() = 0;
};
Q_DECLARE_INTERFACE(TestInterface, "TestInterface.sdfsdfds")
// 接口实现类
class DllPlugin : public QObject, public TestInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "TestInterface.BrushInterface")
Q_INTERFACES(TestInterface)
public:
DllPlugin();
virtual int test();
};
// 插件加载代码
int main(int argc, char *argv[])
{
QPluginLoader* plugin = new QPluginLoader("dllplugin.dll");
QObject* Instance = plugin->instance();
QString dd = plugin->errorString();
}