6

私のプロジェクトでは、ロードを遅らせたい DLL のセットがあります。つまり、プロセスの開始時ではなく、最初の使用時にロードします。つまり、特定の DLL (Qt 自体ではない) に対して MSVC リンカーの /DELAYLOAD フラグ (詳細については [1] を参照) を使用したいということです。その理由は、一部のユーザーが DLL の初期化中にクラッシュを経験するためです (これは再現できません)。ソフトウェアの以前の非 Qt バージョンにはその問題はありませんでしたが、遅延読み込みを使用していたため、違いが生じる可能性があります。

QMake を使用して、遅延読み込みを機能させる方法が見つかりませんでした。/DELAYLOAD を msvc リンカーに渡す方法を知っている人はいますか?

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

4

2 に答える 2

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
}

私は MSVC 2012 で Qt5.1.1 を使用していますが、MS によると、これは VC2005 以降で動作するはずです。

于 2013-10-11T08:37:37.947 に答える
2

QMAKE_LFLAGS_RELEASE などの QMAKE_LFLAGS 変数の 1 つに追加するだけでよいはずです。これは、dll をアプリケーション (おそらく最終的なアプリケーションを作成するもの) にリンクするプロジェクト ファイルにあります。

何かのようなもの

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

動作するはずです。

于 2010-08-17T11:00:41.467 に答える