возможна ли отложенная загрузка DLL при использовании QMake? - PullRequest
6 голосов
/ 25 июня 2010

В моем проекте у меня есть набор DLL, которые я хочу загрузить с задержкой, т.е. при первом использовании, а не при запуске процесса.Это означает, что я хочу использовать / DELAYLOAD флаг компоновщика MSVC (более подробное объяснение см. В [1]) для определенных DLL (не для самого Qt).Причина в том, что некоторые пользователи испытывают сбои во время инициализации DLL (которую мы не можем воспроизвести).В предыдущей версии программного обеспечения, не относящейся к Qt, такой проблемы не было, но в ней использовалась отложенная загрузка, что может иметь значение.

Используя QMake, я не нашел способа заставить отложенную загрузку работать.Кто-нибудь знает, как передать / DELAYLOAD компоновщику msvc, используя функции qmake при обходе qmake?

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

Ответы [ 2 ]

4 голосов
/ 11 октября 2013

Изменить .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 голосов
/ 17 августа 2010

Вы должны иметь возможность просто добавить его к одной из переменных QMAKE_LFLAGS, такой как QMAKE_LFLAGS_RELEASE. Это будет в файле проекта, который отвечает за привязку вашей dll к вашему приложению (предположительно, к тому, который создает конечное приложение).

Что-то вроде

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

должно работать.

...