2010-04-12 82 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