LoadLibrary(Ex)失败,GetLastError返回127 (找不到指定的程序)

    调试程序时遇到一个很怪对问题:一个很简单的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信息更是误导!

你可能感兴趣的:(dll,api,编译器,windows,null,xp)