`
yingyingol
  • 浏览: 748735 次
文章分类
社区版块
存档分类
最新评论

正确的加载DLL

 
阅读更多

问题描述:

假定EXE调用DLL,DLL内部又调用DLL1。

DLL和DLL1与EXE不在同一目录下,而是位于一个单独的目录DLLDIR下。

现象:

LoadLibrary(L"DLL"); 加载失败①。
LoadLibrary(L"DLL绝对路径"); 加载失败②。

失败原因:

失败①好理解,失败②是因为虽然指定了DLL绝对路径作为LoadLibrary的参数,但是该参数却无法对DLL内部调用的DLL1起作用(如果把DLL1扔到EXE同级目录下,则可以成功加载),因此无法加载的实际上是DLL1。

解决方案:

①LoadLibraryEx:

LoadLibraryEx("DLL绝对路径", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
通过指定LOAD_WITH_ALTERED_SEARCH_PATH,让系统DLL搜索顺序从DLL所在目录开始。

②设置当前目录:

注:这个API与系统版本有很大依赖,不推荐使用。

分享到:
评论

相关推荐

    Unalbe to load DLL 不能加载dll解决思路

    Unalbe to load DLL:由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。(Exception from HRESULT:0x800736B1). 解决思路。

    api-ms-win-core-libraryloader-l1-2-0.dll文件

    在Windows系统中,许多应用程序和系统组件都依赖于这个DLL文件来正确加载和管理其他DLL文件。它提供了操作系统级别的函数接口,使得应用程序能够方便地加载和使用其他模块提供的功能。 因此,api-ms-win-core-...

    Windows无法正确加载日语键盘的解决方法

    kbdjpn.dll,imjp81.ime,imjp81k.dll三个文件拷到自己电脑的windows/system32里即可解决

    SAP 发布到web时会报“无法加载sapnco”的错误

    在64位环境下,连接SAP需要使用64的DLL,否则在发布到web时会报“无法加载sapnco”的错误,这里提供64位dll。

    C#中调用DLL时未能加载文件或程序集错误的处理方法(详解)

    在加载DLL时,出现了如下的异常:未能加载文件或程序集“DMC3000, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。 试图加载格式不正确的程序。 经上网查询后,其原因是x64和x86不...

    Oracle.DataAccess.dll

    Oracle.DataAccess.dll 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。

    Visual Stdio 2013 win7下 无法找到 资源编译器DLL

    离线安装好VS2013以后,新建项目,想要打开资源视图,提示“无法找到资源编译器DLL,请确认路径是否正确。” 解决方法: 安装 Window SDK for Windows 8.1 下载后安装即可(有人说要离线安装,但我是在线安装的,...

    sqlite运行所需Vc++运行环境,纯净版System.Data.SQLite.dll及SQLite.Interop.dll

    将当前说明文档的目录下的x64、x86目录和System.Data.SQLite.dll文件复制到您的应用程序根目录中(注意更新引用)。 如果是WEB网站,则复制到Bin目录下即可,发布时,也注意x64和x86一起打包发布 注意,当前的...

    HCNETsdk C#版

    c# 海康 sdk

    C# 调用C++DLL(函数参数包含指针)

    C#调用C++DLL,C++DLL中的函数参数包含指针。 绝对可用。

    自己写的dll的简介

    静态调用使用简单,但不能控制DLL加载时机,EXE加载到内存同时自动加载DLL到内存,EXE退出时DLL也被卸载。 创建DLL 下面我们着重讲解如何在VC下创建DLL 首先要建立一个Win32的DLL工程。再把普通静态库的所有文件...

    Oracle.ManagedDataAccess.dll

    C#链接oracle数据库,32位64位的,10g11g太烦了。还是这个简单好用,1个dll搞定,64位下平安运行!

    无法启动 IIS Express Web 服务器(aspnetcore.dll)

    模块 DLL C:\Program Files (x86)\IIS Express\aspnetcore.dll 未能加载。返回的数据为错误信息。 尝试了各种办法,安装了各种tool都没办法搞定。 最后来个最简单的,直接复制这个dll到C:\Program Files (x86)\IIS ...

    mmLoader:一个用于从内存(x86x64)绕过Windows PE loader加载dll模块的库

    毫米加载器mmLoader是用于直接从内存中加载DLL模块的库。 此外,它将正确处理导入/导出表而绕过Windows PE加载程序。 三胞胎地位x86-windows-static x64-windows-static | CI和CD系统已移至Azure DevOps,mmLoader将...

    asp.net 未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。

    试图加载格式不正确的程序。 源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 程序集加载跟踪: 下列信息有助于确定程序集“XXX”无法加载的...

    c#调用QTdll的框架(包含案例)

    c#调用QTdll的框架(包含案例),可以成功运行,自己创建一个C#窗口程序就可以调用, 调用的时候别忘了将dll所依赖的dll放在同一目录下,否则会报试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)。

    PHP环境文件

    路径不正确将无法加载dll (注意:有些php版本是 ;extension_dir = "./" 要把前面的分号去掉) 2 分别查找 ;extension=php_mbstring.dll ;extension=php_gd2.dll ;extension=php_mysql.dll 把上面3项前面的分号...

    StyleCop 4.7 StyleCop.dll

    “未能从程序集 C:\Program Files (x86)\MSBuild\..\StyleCop 4.7\StyleCop.dll 加载任务“StyleCopTask”。 Could not load file or assembly 'file:///C:\Program Files (x86)\StyleCop 4.7\StyleCop.dll' or one ...

    System.Data.SQLite.dll

    (未能加载文件或程序集“System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139”或它的某一个依赖项。试图加载格式不正确的程序。)引用该dll解决

    dll-exports:DLL函数导出的集合转发给DLL导出函数代理

    您可以清楚地看到这一点,因为应用程序先尝试从应用程序自己的文件夹中加载Windows DLL,然后再尝试从System32 / SysWOW64加载它们。 选择一个,一个常见的目标是C:\Windows\System32\version.dll 启动Visual ...

Global site tag (gtag.js) - Google Analytics