调试程序时遇到一个很怪对问题:一个很简单的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:找不到指定模块
1 把附件相关的4个文件添加到matlab/bin/win64下面的2个相关目录 2 在matlab 里面运行 mbuild -setup, 然后选 y, 再选择2012的那个项目,再选y 3 mbuild应该成功了,此时可以编译为exe文件。 mex设置方法: 1 在...
LoadLIbrary示例
在调试阶段,它可以协助定位DLL加载问题,例如找不到入口点、依赖项缺失等问题。 7. **安全性和兼容性**:在使用Dll_LoadEx时,必须确保加载的DLL是安全的,避免引入恶意代码。此外,要注意DLL版本与应用程序的兼容...
在Android开发中,加载本地共享库.so文件是一个常见的操作,通常涉及到System类中的两个方法:System.loadLibrary()和System.load()。这两个方法都用于加载native代码库,但它们的用法和工作原理存在一些差异。以下...
如果失败,它将返回`NULL`,并可以通过`GetLastError`获取错误代码。 **二、GetProcAddress函数** `GetProcAddress`函数允许你在运行时从已加载的DLL中获取函数的地址。这在你不确定或不希望在编译时硬编码函数...
通过上述代码,我们首先加载了指定的OCX文件,然后获取`DllRegisterServer`函数的地址,并调用它来完成注册。同样地,可以通过调用`DllUnregisterServer`来实现注销操作。 #### 总结 以上介绍了几种常见的ActiveX...
例如,`LoadLibrary`可能返回`NULL`表示加载失败,`GetProcAddress`可能找不到指定函数,`ShellExecute`或`CreateProcess`可能返回`FALSE`表示启动失败。对于这些情况,应通过`GetLastError`获取错误代码,并进行...
但C++ kernel32.dll LoadLibrary只能加载指定路径非托管DLL..有了kernel.dll现在好了.可以像C#一样轻松从内存或资源里加载非托管DLL.. 从指定文件byte[]内存数组加载非托管DLL API 此DLL接口 FARPROC ...
FlshTray.ocx 用于保存,以备以后查找困难。有需要的可以下了
- 如果找不到指定的函数,`GetProcAddress()`将返回NULL,可以通过检查返回值来处理这种情况。 在给定的文件列表中,`Viewdll.exe`可能是一个用于查看或操作DLL文件的工具,而`Readme-说明.htm`和`readme.txt`通常...
`LoadLibrary`返回NULL表示失败,而在Linux中,`dlopen`返回NULL或设置`errno`。因此,需要适配错误处理逻辑,例如检查`dlopen`的返回值并处理`dlerror`。 5. **函数查找** 在Windows中,使用`GetProcAddress`...
在开发和调试过程中,可能出现的常见问题有DLL版本冲突、DLL地狱、找不到指定模块(LoadLibrary失败)等问题。为了解决这些问题,可以采用版本控制、命名规范、使用Side-by-Side Assembly或者依赖项检查工具如...
示范如何使用 LoadLibrary(...) 和 GetProcAddress(....)调用dll的输出函数.
在 C++ 中创建 DLL 需要明确哪些函数或类是公开可被其他程序调用的。通常的做法是在头文件中声明这些函数,并且使用特殊的编译指令标记它们。 ##### 示例:创建一个简单的 DLL 假设我们需要创建一个名为 `MyDLL` ...
它的作用是将指定的DLL文件映射到当前进程的地址空间,返回一个句柄,这个句柄可以用来调用其他与该DLL相关的API。例如,如果我们想加载user32.dll,可以这样调用: ```cpp HMODULE hModule = LoadLibrary("user32...
如何利用WinDbg找出程序崩溃的位置 WinDbg是一款功能强大的调试工具,可以帮助开发者快速定位程序崩溃的位置。下面我们将详细介绍如何利用WinDbg找出程序崩溃的位置。 一、准备工作 在开始之前,我们需要准备以下...
解决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可能导致系统崩溃,而恶意软件也常常利用Hook API来隐藏自身行为或劫持系统功能。 总结来说,Hook API是Windows编程中的一种强大工具,允许开发者在关键操作上添加自定义逻辑。通过对ReadFile、...
设备驱动程序通知应用程序的5种方法 在 Windows 操作系统中,设备驱动程序是操纵硬件的最底层软件接口。为了共享在设备驱动程序设计过程中的经验,文章介绍了设备驱动程序通知应用程序的 5 种方法,详细说明每种...