Qt:加载dll失败的情况不同

时间:2012-02-17 18:38:07

标签: c++ windows qt dll

我相信我想要完成的任务相当容易,但我仍然设法遇到问题,因此我们会感激一些帮助。

我有一个基类(在标题和源文件中),我作为程序的一部分进行了两次子类化,我们称之为WorkerBase。子类WorkerA之一相当简单,而另一个WorkerB依赖于依赖于运行程序的硬件的第三方库。如果硬件不合适或缺少那些库,则使用该子类会导致失败。在这种情况下,我想使用WorkerA

所以,基本上,我如何检测库加载失败?如果缺少库,现在主程序就无法启动。

我正在使用Qt,该程序将仅限Windows。谢谢。

2 个答案:

答案 0 :(得分:1)

我认为,最简单的解决方案是将Woker移动到插件中。

您可以在运行时动态加载QPluginLoader插件。

然后,虽然WorkerB将静态链接到第三方库,但如果WorkerB的所需依赖项不能满足,WorkerB插件将无法加载,您会抓住它使用QPluginLoader并加载WorkerA插件。

另一种方法是使用QLibrary(和QPluginLoader作为参考实现)重新发明你自己的插件系统>。

答案 1 :(得分:0)

可能有帮助

http://developer.qt.nokia.com/doc/qt-4.8/qlibrary.html

bool QLibrary::load ()

加载库并在成功加载库时返回true;否则返回false。由于resolve()总是在解析任何符号之前调用此函数,因此不必显式调用它。在某些情况下,您可能希望提前加载库,在这种情况下,您将使用此功能。