2012-01-18 26 views
1

我們有一個在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和一個不都是一樣的
安裝
  • 清單文件

    還有什麼明顯的我失蹤了嗎?

  • +1

    一個完全胡亂猜測:XP機器沒有所需的C運行時(CRT)庫版本? – 2012-01-18 09:55:50

    +0

    是的,這是我的想法,但我添加了CRT。 – 2012-01-18 10:31:55

    +0

    我今天剛剛有同樣的問題...我有一個DLL加載除Windows XP以外的所有類型的窗口。 (1a8.8c4):未知異常 - 代碼c0000139(第一次機會) LDR:在函數LdrpSnapIAT中引發的異常c0000139 – Benj 2012-01-18 14:59:08

    回答

    4

    我不知道這是否會幫助你,但今天我用裝載機捕捉也有同樣的問題。事實證明,我的問題在depends.exe中是可見的,但我不知道dlls被粉紅色的意義......我只用依賴診斷出口問題,而不是導入問題。

    我的問題是我使用的是「RegGetValue」,它只在Vista +上可用。不幸的是,如果您在Windows XP上使用僅Vista的API,則沒有適當的錯誤報告。要看這顯示出在進口部分,像這樣:

    enter image description here

    我注意到,你的問題是與Kernel32.dll中,而不是Advapi.dll因此檢查與進口依賴...

    +0

    順便說一下,裝載機捕捉沒有告訴我,這是RegGetValue ...它只是精確定位Advapi,所以我有依靠取決於休息... – Benj 2012-01-18 15:25:40

    +1

    謝謝Benj,那正是問題所在!我還沒有意識到粉紅色圖標的重要性,但我會將它記錄下來。在我的情況下,它是'Kernel32.dll'。我的DLL調用了Vista中添加的一些功能(例如'InitialiseConditionVariable()')。當kernel32被加載時,這些無法解決,這會導致c0000139異常。 – 2012-01-18 16:32:23

    +0

    太棒了,很高興它幫助!我有一種感覺,這是同樣的問題。 – Benj 2012-01-18 17:02:38

    相關問題