當我試着使用LoadLibrary project.dll失敗。指定的模塊找不到
regsvr32 project.dll
我得到這個錯誤登記我的C++/ATL項目的32位版本:
LoadLibrary("project.dll") failed - The specified module could not be found
project.dll是我的DLL使用Visual Studio 10上的ATL構建。
64位版本註冊正常。
我錯過了什麼?
當我試着使用LoadLibrary project.dll失敗。指定的模塊找不到
regsvr32 project.dll
我得到這個錯誤登記我的C++/ATL項目的32位版本:
LoadLibrary("project.dll") failed - The specified module could not be found
project.dll是我的DLL使用Visual Studio 10上的ATL構建。
64位版本註冊正常。
我錯過了什麼?
我觀察到完全相同的錯誤,但解決方案未安裝可再發行組件。根據depend.exe,所有依賴DLL都存在於系統中。
在我的情況下,KERNEL32.DLL的圖標稍帶紅色。 Depends.exe並沒有提供太多的解釋,但是四處挖掘,發現系統中DLL中缺少一個導入的函數。要查看導入的函數,請在樹視圖中選擇相關DLL ,然後在右側面板中查找導入。按PI列排序以查看缺少進口的紅色圖標。
在我的情況下,缺少的功能是沒有我的悲傷目標操作系統中,Windows XP上存在的函數。由於我的程序沒有直接依賴於這個功能,我能夠與#define
荷蘭國際集團在我的項目下列閃避:
#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
與這些宏編譯說得那麼有問題的功能在頭未聲明,因此不會在加載時導入。現在我可以使用regsvr32
。這當然是一個非常具體(幸運)的案例。我不依賴那個進口或任何其他更新的API,所以我可以逃避重新定位項目。如果它不是一個系統DLL,我將需要找到一個更新的版本,這很容易導致需要更新依賴圖的整個子樹。或者更糟糕的是,如果我依賴缺失的進口產品,則需要進行一些嚴重的重構。
概括起來,可以由以下問題導致此錯誤消息:
1:除了IESHIMS.DLL和WER.DLL這顯然是在這個古老工具的錯誤。
2 .:或者真的,加載DLL在特定系統上的任何問題
雖然我不工作在那個項目上,並沒有能力檢查出來,這似乎是解決這個問題的正確方法。 +1 - 謝謝! – Danield 2014-09-30 08:48:02
錯誤描述在這種情況下是誤導性的。系統找到您的DLL(project.dll),但您的DLL的一個(或多個)依賴項可能會丟失。
我剛安裝
Microsoft Visual C++ 2010 Redistributable Package
,現在我可以安裝DLL。
儘管這樣可行,但我對此並不滿意,因爲我不想將這個軟件包安裝在客戶端上,以便讓我的dll工作。
我剛剛注意到,在我使用的安裝程序中,有一個選項可以包含此軟件包作爲先決條件 - 因此如果用戶尚未安裝該軟件包,安裝程序將繼續並下載軟件包 – Danield 2012-07-30 09:46:09
where project.dll?在與您調用此命令的位置相同的目錄中?在PATH中? – stijn 2012-07-30 07:51:08
是的,它是在同一目錄(否則我會得到一個錯誤,說沒有這樣的文件存在!) – Danield 2012-07-30 07:57:16
然後打開在依賴沃克的DLL,看看什麼DLL丟失 – stijn 2012-07-30 08:01:30