簡體   English   中英

在C ++程序(MFC)中查找加載dll的位置

[英]Find where dll is loaded from in C++ program (MFC)

我有大型的遺留C ++應用程序(Visual Studio 2010),我需要在加載特定的dll之前執行一些代碼。 問題是在我執行任何代碼之前dll正在加載,所以我試圖弄清楚是什么觸發它加載。

我已經為鏈接選項中的dll指定了/ DELAYLOAD,它應該在需要之前停止dll加載。 但是在我執行任何代碼之前它仍然被加載。 該應用程序是MFC,所以我的入口點是CWinApp :: InitApplication()的重寫。

我懷疑它必須是應用程序中引用dll中的類型的全局變量,但我不確定如何找到變量(代碼庫很大,並且全局變量不一致地命名)。

任何想法如何找到觸發dll加載的內容,或者如何找到全局變量?

我通過在延遲加載輔助函數__delayLoadHelper2上設置斷點來解決問題。 此功能可在以下位置找到:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\delayhlp.cpp

當加載標記為延遲加載的dll時調用它。

我在__delayLoadHelper2設置了斷點,並在被命中時查看了調用堆棧。 這顯示了我的代碼中觸發dll-load的函數。

它是由全局單例構造函數觸發的,它從dll創建了一個類型。 此代碼在CWinApp::InitApplication()之前執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM