LoadLibrary(Ex)失败,GetLastError返回127 (找不到指定的程序)
2006-11-08 09:20
495 查看
调试程序时遇到一个很怪对问题:一个很简单的win32 dll,就一个DllMain,里面就几行代码在Process Attach时调用API函数获取注册表的指定键值 ,很简单。但偏偏出了问题。问题还很怪异:另外一个程序LoadLibrary加载这个dll时返回NULL,GetLastError返回127(“ 找不到指定的程序”)。呵呵,这个错误就是怪异之处,非常难理解(其实我到现在也没有理解什么叫“指定到程序”)。去掉DllMain里面到那几行代码,只留下空函数,再编译就OK,加上那几行API就无法LoadLibrary。
按理说,就算API调用失败,也不应该影响dll本身的加载吧??dll加载失败一般发生再DllMain返回FALSE,或dll本身结构出现错误。这两点在我的这个程序里面应该都不存在:我的DllMain明明返回了TRUE(其实dll根本就没有加载,DllMain也没有执行),这个dll是VS2005刚刚编译出来的,其结构不大可能被破坏。
后来使用来排除法确定是调用了RegGetValue到缘故。
仔细查看MSDN,这个函数“Requires Windows Vista or Windows XP Professional x64 Edition”而我用的是32位版本的Windows XP Pro,是个问题。不过很难理解。就算我调用了一个不被支持的API函数,顶多在这个函数被执行是给我throw一下(或返回FALSE之类的),可我遇到的情况是在这个函数被执行之前就出了问题,好像由于使用了这个函数,导致编译器在编译dll时做了什么事情似的!!实在无法理解了。还有LoadLibrary失败后的LastError信息更是误导!
按理说,就算API调用失败,也不应该影响dll本身的加载吧??dll加载失败一般发生再DllMain返回FALSE,或dll本身结构出现错误。这两点在我的这个程序里面应该都不存在:我的DllMain明明返回了TRUE(其实dll根本就没有加载,DllMain也没有执行),这个dll是VS2005刚刚编译出来的,其结构不大可能被破坏。
后来使用来排除法确定是调用了RegGetValue到缘故。
仔细查看MSDN,这个函数“Requires Windows Vista or Windows XP Professional x64 Edition”而我用的是32位版本的Windows XP Pro,是个问题。不过很难理解。就算我调用了一个不被支持的API函数,顶多在这个函数被执行是给我throw一下(或返回FALSE之类的),可我遇到的情况是在这个函数被执行之前就出了问题,好像由于使用了这个函数,导致编译器在编译dll时做了什么事情似的!!实在无法理解了。还有LoadLibrary失败后的LastError信息更是误导!
相关文章推荐
- LoadLibrary(Ex)失败,GetLastError返回127 (找不到指定的程序)
- LoadLIbrary 失败GetLasterror 返回127 126
- LoadLibrary失败,getlasterror返回126的心得
- LoadLibrary失敗,GetLastError 返回127錯誤
- LoadLibrary 失败 GetLastError 126
- 打开虚拟串口COM18失败,GetLastError返回2
- TransactNamedPipe函数在切换线程时失败,GetLastError 返回 231。 再次 Read 成功。
- 关于UpdateLayeredWindow调用失败返回0但是Getlasterror为0的问题
- windows 问题 LoadLibrary失败,GetLastError= 193
- GDI+ / PNG 实现半透明窗口,正常情况下没有问题 将系统设置为16位色后UpdateLayeredWindow函数失败,GetLastError返回8(ERROR_NOT_ENOUGH_MEMORY)
- OpenProcess调用失败,GetLastError返回5
- LoadLibrary返回NULL,GetLastError返回998
- LoadLibrary 加载 dll 使用GetLastError返回14001原因
- GetProcAddress()失败 GetLastError() 127
- WIN7上UpdateLayeredWindow执行失败,getlasterror返回307的问题解决方法
- 打开虚拟串口COM18失败,GetLastError返回2
- CreateBitmapIndirect() GetLastError() 返回 错误的参数 创建失败原因
- 如何解决加载动态链接库DLL失败,返回0,GetLastError返回错误码126
- UpdateLayeredWindow()失败,GetLastError()返回0
- Win7下使用VS2013编写的ActvieX在XP下注册提示:LoadLibrary("XXX.dll")失败-找不到指定的程序