2017-05-04 45 views
0

我在這個網站上搜索了我要找的東西;但我不明白。如何在C++程序中顯示Windows'「DLL not found」錯誤?

所以,我寫了這個問題。

我用C++(代碼塊IDE)編寫了一個.dll文件和一個程序。如果dll文件和程序位於同一個目錄中,我的程序將工作。

但如果我刪除DLL文件並執行我的程序時,Windows顯示我這個錯誤:

「xxx.exe已停止工作。」

我想「程序無法啓動,因爲您的計算機缺少xxx.dll。」消息而不是這個。

我該怎麼辦?

+0

您可能需要在[應用程序清單]中指定.dll作爲依賴項(https://msdn.microsoft.com/en-us/library/windows/desktop/aa374191(v = vs.85).aspx )。 – VTT

+0

你爲什麼要這樣?普通用戶沒有權限更改'\ Program Files \ YourApp \'中的文件,並且應信任管理員不要中斷程序。如果他們仍然這樣做,他們應該瞭解他們行動的後果。 – MSalters

+0

@ MSalters用戶將做各種事情,包括「刪除所有這些不必要的文件」。這很愚蠢,當然,但這並不意味着它不會發生。爲什麼你認爲這是關於有合格管理員的系統? – Aziuth

回答

1

有三種鏈接可以做。

  • 負載時鏈接就是當你的程序啓動DLL被自動加載。 Windows通常在與可執行文件相同的文件夾中找到此DLL。
  • 運行時鏈接是當您通過在代碼中調用LoadLibrary專門加載DLL時。

When the application calls the LoadLibrary or LoadLibraryEx functions, the system attempts to locate the DLL (for details, see Dynamic-Link Library Search Order). If the search succeeds, the system maps the DLL module into the virtual address space of the process and increments the reference count. If the call to LoadLibrary or LoadLibraryEx specifies a DLL whose code is already mapped into the virtual address space of the calling process, the function simply returns a handle to the DLL and increments the DLL reference count. ~ taken from here

你想要做什麼是運行時鏈接到您的DLL和測試結果,而不是現在你在做什麼。

  • Visual Studio offers a third option, delay-loaded DLL's.~ MSalters

它處理的LoadLibrary呼喚你。

+1

Visual Studio提供了第三個選項,延遲加載的DLL。不過CodeBlocks/MinGW並不是一個選項。 – MSalters

+0

謝謝您的信息!作爲MinGW用戶,我不知道這個功能是否存在。將編輯答案以考慮您的評論。 –

相關問題