2010-04-12 84 views
1

我正在重新組織我們的應用程序中的一些遺留庫,其中 將非託管代碼調用到託管代碼庫中。儘管我的代碼 重組,它產生以下裝載機錯誤:Windows加載程序問題 - 打開詳細模式


... 
'app.exe': Loaded 'C:\WINDOWS\system32\CsDisp.dll' 
'app.exe': Loaded 'C:\WINDOWS\system32\psapi.dll' 
'app.exe': Loaded 'C:\WINDOWS\system32\shell32.dll' 
'app.exe': Loaded 'C:\appCode\Debug\daq206_32.dll', Binary was not built with debug information. 
'app.exe': Loaded 'C:\appCode\Debug\SiUSBXp.dll', Binary was not built with debug information. 
'app.exe': Loaded 'C:\appCode\Debug\AdlinkDAQ.dll', Symbols loaded. 
'app.exe': Loaded 'C:\WINDOWS\system32\P9842.dll', Binary was not built with debug information. 
LDR: LdrRelocateImageWithBias() failed 0xc0000018 
LDR: OldBase  : 10000000 
LDR: NewBase  : 00A80000 
LDR: Diff  : 0x7c90d6fa0012f6cc 
LDR: NextOffset : 00000000 
LDR: *NextOffset : 0x0 
LDR: SizeOfBlock : 0xa80000 
Debugger:: An unhandled non-continuable exception was thrown during process load 

相信0xc0000018錯誤是重疊的地址範圍。所以,我有兩個問題。首先,哪些鏈接器選項可能導致此錯誤?我目前正在使用/ DYNAMICBASE:NO和/ FIXED:No,因爲這是以前的一些圖書館是如何建立的。
其次,有沒有辦法打開加載器的詳細模式,所以我可以看到究竟是什麼試圖加載? P9842是第三方庫,所以我想它會在P9842之後進入我的一個庫,並且在那個庫上失敗。我可以縮小它嗎?謝謝。

回答

1

不知道第一個問題。搜索狀態代碼hit this article with the interesting note「在XP之前,沒有在Windows中檢查具有不同內存類型的頁面映射,但Windows XP確實檢查了,第二個內存類型映射嘗試將失敗,並顯示STATUS_CONFLICTING_ADDRESSES(0xc0000018)錯誤消息。如果您使用的是MapViewOfFile,則可能是相關的...

對於第二個問題,您想查看加載程序捕捉。見this article at msdn。這個命令應該有幫助: 「gflags -i yourApp.exe + sls」

+0

感謝您的回答。它確實讓我超過了這個錯誤,並且導致了Access Violation(我的幸運日:-)。關於裝載機快照的文章比我遇到的其他文章要好。 – doobop 2010-04-13 13:00:52