2017-01-31 40 views
-1

這是一個複雜的情況。執行任何程序或dll代碼之前大約10分鐘的exe加載延遲。程序和dll都是內部編寫的。使用早期版本的dll似乎可以緩解這個問題。我試圖確定的是在編譯器生成的代碼中將dll附加到程序中的情況,以及如何在加載程序時導致延遲幾分鐘。程序和dll都是使用VC++ 6.0製作的。這開始發生在大約1年前的dll修訂版之後,但修訂版與任何dll初始化/啓動代碼無關。這不會在所有計算機上發生,也不會影響在任何給定計算機上使用dll的所有程序。似乎沒有任何模式的失敗。在執行任何程序代碼之前,通過靜態.lib鏈接到dll的程序會發生什麼?

+0

應用程序和/或DLL可以在啓動時做很多事情,例如,在'DllInitialize()'或任何全局/靜態對象的構造函數中 - 檢查這些。你可以在'WinMain'開始時將一些日誌記錄到'main()'(或'MessageBox()')的開頭,以查看主實際啓動的時間。 – axalis

+0

那麼在這10分鐘內(當dll代碼被調用時)會發生什麼?應用程序是否被凍結?或者它正在做別的事情?你是怎麼測試的(在'DllMain'中增加了一些代碼)?是dll鏈接到應用程序(該應用程序不會啓動,如果dll不存在),或它通過LoadLibrary加載,或者是[延遲加載](https://msdn.microsoft.com/en-我們/庫/ 151kt790(v = vs.71)的.aspx)? – CristiFati

+1

標題相當混亂。 _static_ .lib表示你不**鏈接到DLL。當使用DLL的時候,你會使用_import_ .lib。使用VC++ 6.0製作「 – MSalters

回答

0

「編譯器生成的代碼將dll附加到程序中會發生什麼?」

幾乎沒有。編譯器生成的代碼存在於DLL中,而不是EXE中。它有三個基本任務:確保加載C++運行庫,調用全局對象的構造函數,並調用DllMain。請注意,生成的代碼的最後兩部分僅僅會調用您的代碼;生成的代碼本身以毫微秒執行。

相關問題