`
ruilin215
  • 浏览: 1161291 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

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 WindowsVista or WindowsXP Professional x64 Edition”而我用的是32位版本的Windows XP Pro,是个问题。不过很难理解。就算我调用了一个不被支持的API函数,顶多在这个函数被执行是给我throw一下(或返回FALSE之类的),可我遇到的情况是在这个函数被执行之前就出了问题,好像由于使用了这个函数,导致编译器在编译dll时做了什么事情似的!!实在无法理解了。还有LoadLibrary失败后的LastError信息更是误导!
分享到:
评论

相关推荐

    loadlibrary failed with error 126:找不到指定模块

    loadlibrary failed with error 126:找不到指定模块

    matlab找不到编译器的问题,以及无法编译DLL的问题

    1 把附件相关的4个文件添加到matlab/bin/win64下面的2个相关目录 2 在matlab 里面运行 mbuild -setup, 然后选 y, 再选择2012的那个项目,再选y 3 mbuild应该成功了,此时可以编译为exe文件。 mex设置方法: 1 在...

    LoadLIbrary示例

    LoadLIbrary示例

    Dll_LoadEx汉化版

    在调试阶段,它可以协助定位DLL加载问题,例如找不到入口点、依赖项缺失等问题。 7. **安全性和兼容性**:在使用Dll_LoadEx时,必须确保加载的DLL是安全的,避免引入恶意代码。此外,要注意DLL版本与应用程序的兼容...

    android安卓源码解析-Sytem.loadLibrary.pdf

    在Android开发中,加载本地共享库.so文件是一个常见的操作,通常涉及到System类中的两个方法:System.loadLibrary()和System.load()。这两个方法都用于加载native代码库,但它们的用法和工作原理存在一些差异。以下...

    new_test.zip_Getprocadress_LoadLibrary_get dress的用法

    如果失败,它将返回`NULL`,并可以通过`GetLastError`获取错误代码。 **二、GetProcAddress函数** `GetProcAddress`函数允许你在运行时从已加载的DLL中获取函数的地址。这在你不确定或不希望在编译时硬编码函数...

    ActiveX控件注册的几种方法

    通过上述代码,我们首先加载了指定的OCX文件,然后获取`DllRegisterServer`函数的地址,并调用它来完成注册。同样地,可以通过调用`DllUnregisterServer`来实现注销操作。 #### 总结 以上介绍了几种常见的ActiveX...

    开发中调用window程序.rar

    例如,`LoadLibrary`可能返回`NULL`表示加载失败,`GetProcAddress`可能找不到指定函数,`ShellExecute`或`CreateProcess`可能返回`FALSE`表示启动失败。对于这些情况,应通过`GetLastError`获取错误代码,并进行...

    从指定文件byte[]内存数组加载非托管DLL API

    但C++ kernel32.dll LoadLibrary只能加载指定路径非托管DLL..有了kernel.dll现在好了.可以像C#一样轻松从内存或资源里加载非托管DLL.. 从指定文件byte[]内存数组加载非托管DLL API 此DLL接口 FARPROC ...

    VB控件FlshTray.ocx

    FlshTray.ocx 用于保存,以备以后查找困难。有需要的可以下了

    dll文件打开(函数)

    - 如果找不到指定的函数,`GetProcAddress()`将返回NULL,可以通过检查返回值来处理这种情况。 在给定的文件列表中,`Viewdll.exe`可能是一个用于查看或操作DLL文件的工具,而`Readme-说明.htm`和`readme.txt`通常...

    loadlibrary:将Windows动态链接库移植到Linux

    `LoadLibrary`返回NULL表示失败,而在Linux中,`dlopen`返回NULL或设置`errno`。因此,需要适配错误处理逻辑,例如检查`dlopen`的返回值并处理`dlerror`。 5. **函数查找** 在Windows中,使用`GetProcAddress`...

    Dll主程序,主功能模块

    在开发和调试过程中,可能出现的常见问题有DLL版本冲突、DLL地狱、找不到指定模块(LoadLibrary失败)等问题。为了解决这些问题,可以采用版本控制、命名规范、使用Side-by-Side Assembly或者依赖项检查工具如...

    如何调用dll中的函数.rar_GetProcAddress dll_LoadLibrary vc_调用DLL中的函数_调用D

    示范如何使用 LoadLibrary(...) 和 GetProcAddress(....)调用dll的输出函数.

    c++和matlab调用DLL方法

    在 C++ 中创建 DLL 需要明确哪些函数或类是公开可被其他程序调用的。通常的做法是在头文件中声明这些函数,并且使用特殊的编译指令标记它们。 ##### 示例:创建一个简单的 DLL 假设我们需要创建一个名为 `MyDLL` ...

    根据名称调用WindowsAPI函数

    它的作用是将指定的DLL文件映射到当前进程的地址空间,返回一个句柄,这个句柄可以用来调用其他与该DLL相关的API。例如,如果我们想加载user32.dll,可以这样调用: ```cpp HMODULE hModule = LoadLibrary("user32...

    如何利用WinDbg找出程序崩溃的位置

    如何利用WinDbg找出程序崩溃的位置 WinDbg是一款功能强大的调试工具,可以帮助开发者快速定位程序崩溃的位置。下面我们将详细介绍如何利用WinDbg找出程序崩溃的位置。 一、准备工作 在开始之前,我们需要准备以下...

    Eo Webbrowser 解决win10 Failed to resolve LoadLibrary

    解决win10操作系统,初始化Eo Webbrowser报错"Failed to resolve LoadLibrary",需要调用eowp.exe,来进行处理,Both EO.Pdf and EO.WebBrowser dynamically create child processes and run browser engine inside ...

    Hook Api,hook ReadFile,hook WriteFile,hook LoadLibrary

    例如,不正确的Hook可能导致系统崩溃,而恶意软件也常常利用Hook API来隐藏自身行为或劫持系统功能。 总结来说,Hook API是Windows编程中的一种强大工具,允许开发者在关键操作上添加自定义逻辑。通过对ReadFile、...

    设备驱动程序通知应用程序的5种方法

    设备驱动程序通知应用程序的5种方法 在 Windows 操作系统中,设备驱动程序是操纵硬件的最底层软件接口。为了共享在设备驱动程序设计过程中的经验,文章介绍了设备驱动程序通知应用程序的 5 种方法,详细说明每种...

Global site tag (gtag.js) - Google Analytics