代码之家  ›  专栏  ›  技术社区  ›  Frank Osterfeld

使用qmake时可能延迟加载dll?

  •  6
  • Frank Osterfeld  · 技术社区  · 14 年前

    在我的项目中,我有一组要延迟加载的DLL,即在第一次使用时而不是在进程启动时。 原因是一些用户在DLL初始化过程中遇到崩溃(我们无法重现)。 以前的非qt版本的软件没有这个问题,但它使用了延迟加载,所以这可能会有所不同。

    Using QMake, I found no way to get delayed loading to work. Does anyone know how to pass /DELAYLOAD to the msvc linker, using qmake features on bypassing qmake?

    〔1〕 http://www.codeproject.com/KB/DLL/Delay_Loading_Dll.aspx

    2 回复  |  直到 11 年前
        1
  •  4
  •   Marc    11 年前

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

        2
  •  2
  •   Troubadour    14 年前

    You ought to be able to just add it to one of the QMAKE_LFLAGS variables such as QMAKE_LFLAGS_RELEASE. 这将在负责将DLL链接到应用程序(可能是创建最终应用程序的项目文件)的项目文件中。

    类似的东西

    win32 {
        QMAKE_LFLAGS_RELEASE+=/DELAYLOAD:MyDll.dll
    }
    

    应该工作。