qt - 使用 QMake 时是否可以延迟 DLL 加载?

标签 qt visual-c++ qmake

在我的项目中,我有一组 DLL 我想延迟加载,即在第一次使用时而不是在进程启动时加载。
这意味着我想对某些 DLL(不是 Qt 本身)使用 MSVC 链接器的/DELAYLOAD 标志(更多解释见 [1])。
原因是一些用户在 DLL 初始化期间遇到崩溃(我们无法重现)。
该软件的前非 Qt 版本没有这个问题,但它使用了延迟加载,所以这可能会有所作为。

使用 QMake,我发现无法延迟加载工作。有谁知道如何使用 qmake 功能绕过 qmake 将/DELAYLOAD 传递给 msvc 链接器?

[1] http://www.codeproject.com/KB/DLL/Delay_Loading_Dll.aspx

最佳答案

修改 .pro 文件:

## Make delayed load possible. If your project is itself a DLL which uses xxx.dll, you
## also need to include this line in the applications that use your DLL.
LIBS += DelayImp.lib

## Specify that xxx.dll loading needs to be delayed
win32:CONFIG(release, debug|release) {
    QMAKE_LFLAGS_RELEASE += /DELAYLOAD:xxx.dll
} else:win32:CONFIG(debug, debug|release) {
    QMAKE_LFLAGS_DEBUG += /DELAYLOAD:xxx.dll
}

我将 Qt5.1.1 与 MSVC 2012 一起使用,但根据 MS,这应该适用于 VC2005 及更高版本。

关于qt - 使用 QMake 时是否可以延迟 DLL 加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3116176/

相关文章:

qt - Qt Creator 6.0.0 如何打开 QML-Form 文件?

将 C99 代码转换为 C89

c++ - 使用 qmake 在 VS 中检索修订号

c++ - Qt:包含 .pri 以使用库 - 不正确的包含

c++ - 如何仅在定义的时间获取事件?

c++ - 如何下载和安装 Qt 库?

mfc - 如何获取pendrive的盘符

c++ - qmake转cmake链接错误

c++ - 继续 while 循环直到 EOF (Qt)

visual-c++ - VS2015 UCRT源文件在哪里?