`
lovnet
  • 浏览: 6881367 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

LoadLibrary加载动态库失败的解决办法

 
阅读更多

方式一 采用LoadLibraryEx

转载:http://blog.sina.com.cn/s/blog_62ad1b8101017qub.html

若DLL不在调用方的同一目录下,可以用LoadLibrary(L"DLL绝对路径")加载。但若调用的DLL内部又调用另外一个DLL,此时调用仍会失败。解决办法是用LoadLibraryEx:
LoadLibraryEx("DLL绝对路径", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
通过指定LOAD_WITH_ALTERED_SEARCH_PATH,让系统DLL搜索顺序从DLL所在目录开始。


方式二 采用SetCurrentDir

转载:http://blog.csdn.net/flyayi2006/article/details/5526982

跨目录调用dll,你应该这样
1 用GetCurrentDir保存当前的工作目录
2 用SetCurrentDir将当前的工作目录,设置为你的DLL所在的路径,需要使用绝对路径
3 用LoadLibrary你的DLL
4 使用SetCurrentDir恢复到原来的工作路径


示例

    TCHAR chCurDir[MAX_PATH] = {0};
    GetCurrentDirectory(MAX_PATH, chCurDir);
    SetCurrentDirectory(_T("E:\\test\\"));
    m_hDLL = LoadLibrary(_T("MyTest.dll"));
    SetCurrentDirectory(chCurDir);

分享到:
评论

相关推荐

    动态加载动态库

    动态加载动态库(Dynamic Link Library, DLL)是Windows操作系统中的一种技术,允许程序在运行时按需加载功能模块,而不是在程序启动时就全部加载。这样可以节省内存资源,因为多个程序可以共享同一份DLL文件,同时...

    MemoryModule windows 下内存加载动态库的源代码

    本主题将详细介绍`MemoryModule`,这是一个实现Windows下内存加载动态库的源代码。 内存加载动态库,顾名思义,是指不通过传统的文件系统加载DLL,而是将DLL的内容直接读入到进程的内存空间中,然后由操作系统完成...

    学习动态库的编译,以及如何加载动态库生成可执行文件

    在Windows API中,我们使用`LoadLibrary`函数加载动态库,`GetProcAddress`函数获取导出函数的地址。以下是一个简单的示例: ```cpp HMODULE libraryHandle = LoadLibrary("MyDynamicLibrary.dll"); if ...

    内存加载动态链接库(DLL)文件

    内存加载动态链接库(DLL)是Windows操作系统中的一个重要特性,它允许程序在运行时动态地加载和使用函数库。DLL不仅可以节省系统资源,还可以实现代码共享,提高软件的可维护性和扩展性。以下是对这个主题的详细...

    动态链接库之动态加载

    如果DLL不存在或加载失败,LoadLibrary会返回NULL。例如: ```cpp HMODULE hModule = LoadLibrary("MyDll.dll"); ``` 2. 使用GetProcAddress函数:一旦DLL被加载,我们可以使用GetProcAddress获取DLL导出函数的地址...

    C++动态库的使用.rar

    跨平台开发时,需要根据目标系统的API来管理和加载动态库。 八、总结 C++动态库是实现代码复用和模块化的重要手段。理解其工作原理,熟练掌握创建和使用方法,对于提升软件开发效率和质量具有重要意义。在实际应用...

    动态库dll生成和调用

    9. **使用静态库与动态库的选择**:静态库(.lib)会将库代码直接编译进目标程序,而动态库在运行时加载。静态库体积较大,但不依赖外部DLL;动态库可以节省磁盘空间和内存,但需要管理依赖关系。 10. **版本管理**...

    神思读卡器的示例代码和动态库SS628-100

    开发者需要编写JNI头文件,编译生成动态库,并在Java代码中使用`System.loadLibrary`加载库。 为了确保跨平台兼容性,开发者需要注意在32位和64位系统下分别使用对应的动态库。在构建和部署项目时,需要确保选择...

    vc动态库例子

    - 使用`LoadLibrary`函数加载动态库,`GetProcAddress`获取导出函数的地址,最后使用`FreeLibrary`卸载库。例如: ```cpp HMODULE hModule = LoadLibrary("MyDLL.dll"); if (hModule != NULL) { typedef int (*...

    C/C++ 动态库嵌套调用源代码文件

    在实际开发中,可能还需要处理错误情况,例如加载库失败或找不到特定函数等。此外,考虑到动态库的版本兼容性问题,可能需要设计良好的API版本控制策略。 在压缩包文件"DLLTest"中,可能包含了演示如何进行动态库...

    动态调用其他Apk中的类so加载失败问题测试工程

    这个测试工程"动态调用其他Apk中的类so加载失败问题"着重于探讨如何在运行时加载来自不同应用(AppA、AppB)的类库,特别是涉及到动态加载.so本地库时可能遇到的问题。在Android系统中,动态加载不仅包括Java类,还...

    生成及调用动态库生成及调用动态库生成及调用动态库

    3. **处理程序集依赖**:如果动态库有额外的依赖(如其他DLL或.NET Framework版本),确保这些依赖项也已正确安装或引用,否则调用可能会失败。 4. **部署动态库**:在发布应用程序时,确保`ClassLibrary1.dll`与主...

    安卓加载so卡死问题复现

    在低版本的智能电视盒子上,由于硬件资源有限和系统优化不足,加载动态库可能更为复杂。gnustl作为C++运行时库,它的加载过程涉及到符号解析、内存分配、线程支持等,这些操作在资源紧张的环境下可能出现问题。特别...

    VC++动态加载数据库路径

    首先,我们需要理解VC++中的动态库(DLL)加载和函数调用。动态库是一种代码共享机制,可以减少内存占用,同时允许程序在运行时加载特定功能。在Windows环境下,我们可以使用`LoadLibrary`函数加载DLL,然后使用`...

    c++动态库调用(自写)

    我们首先使用`LoadLibrary()`函数加载动态库,然后通过`GetProcAddress()`获取库中特定函数的地址。这种方法灵活性高,因为可以在程序运行时决定是否加载库,但需要手动处理函数指针和错误检查。 示例代码: ```cpp...

    立象214动态库.rar

    1. **加载动态库**:在程序中通过API函数LoadLibrary或LoadLibraryEx加载动态库,使得程序可以访问其中的函数和资源。 2. **获取函数指针**:使用GetProcAddress函数获取动态库中特定函数的地址,如初始化打印机、...

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

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

    安卓so库动态加载示例.zip

    "安卓so库动态加载示例.zip" 提供了一个关于如何在Android应用程序中动态加载SO库的实践案例。下面我们将深入探讨这一主题。 1. **动态加载SO库的原因**: - **减小APK体积**:静态链接所有SO库会使APK文件变大,...

    win32动态库创建与调用

    2. **使用`LoadLibrary`和`GetProcAddress`**:在运行时,使用`LoadLibrary`函数加载动态库,获取其模块句柄。然后,通过`GetProcAddress`函数获取动态库中特定函数的地址,实现函数调用。 3. **卸载库**:在不再...

Global site tag (gtag.js) - Google Analytics