`
ruilin215
  • 浏览: 1170065 次
  • 性别: 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 ...

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

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

    Activex\ActiveX控件注册的几种方法(源码级的,值得看看)

    1. 使用`LoadLibrary`函数加载ActiveX控件。 2. 使用`GetProcAddress`函数获取控件中的注册函数`DllRegisterServer`(以及注销函数`DllUnregisterServer`)的地址。 3. 调用`DllRegisterServer`函数进行注册,或调用...

Global site tag (gtag.js) - Google Analytics