我們有一個在Vista和Win7上運行良好的DLL一段時間,但在XP上運行時出現錯誤「調用LoadLibrary()
加載它時,找不到指定的程序」。在Windows XP上運行應用程序時出現「無法找到指定的程序」錯誤(例外c0000139)
我試着用配置文件選項運行它通過Dependency Walker中,以全局標誌設置爲顯示卡裝載器的唯一貌似有用的信息,我可以把它弄出來是:
LDR: Snapping imports for MyDll.dll from KERNEL32.dll
LDR: LdrGetProcedureAddress by NAME - RtlGetLastWin32Error
LDR: exception c0000139 thrown within function LdrpSnapIAT
Exception record: 0012E490
Context record: 0012E4A4
Context->Eip = 7C9673BE
Context->Ebp = 0012E7C0
Context->Esp = 0012E770
LDR: LdrpSnapIAT - caught exception c0000139 snapping thunks (#2)
LDR: LdrpWalkImportTable - LdrpSnapIAT #2 failed with status c0000139
我相信,例外c0000139
是'未找到入口點'。
我們已經注意確保沒有任何對後XP API的直接依賴關係(有幾個,但這些都是動態加載的LoadLibrary()
)。該dll建立了WINVER
和_WIN32_WINNT
設置爲0x0501
。庫的入口點在依賴關係監視器中顯示的輸出中可見,並且沒有明顯的缺失依賴關係。相同的應用程序在Vista和Win7中運行得非常好。早期版本的dll在XP上運行良好(由於此組件的性質,很難看出哪些更改會導致事件中斷)。
編輯:其他的事情我認爲我打折:
- Visual Studio的運行時間是從工作的dll和一個不都是一樣的
還有什麼明顯的我失蹤了嗎?
一個完全胡亂猜測:XP機器沒有所需的C運行時(CRT)庫版本? – 2012-01-18 09:55:50
是的,這是我的想法,但我添加了CRT。 – 2012-01-18 10:31:55
我今天剛剛有同樣的問題...我有一個DLL加載除Windows XP以外的所有類型的窗口。 (1a8.8c4):未知異常 - 代碼c0000139(第一次機會) LDR:在函數LdrpSnapIAT中引發的異常c0000139 – Benj 2012-01-18 14:59:08