qt5.12.12插件机制无法加载插件问题

时间:2024-10-23 20:10:30

环境: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();
}