使用QMake时可能延迟DLL加载?

时间:2010-06-25 07:05:48

标签: qt visual-c++ qmake

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

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

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

2 个答案:

答案 0 :(得分:4)

修改.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及更高版本中使用。

答案 1 :(得分:2)

您应该能够将其添加到QMAKE_LFLAGS变量之一,例如QMAKE_LFLAGS_RELEASE。这将在项目文件中,该文件负责将您的dll链接到您的应用程序(可能是创建最终应用程序的那个)。

这样的东西
win32 {
    QMAKE_LFLAGS_RELEASE+=/DELAYLOAD:MyDll.dll
}

应该有用。