windows 环境下,可执行 exe 文件和 .dll 文件在不同目录下的处理办法

news/2024/11/8 22:43:29/

在 Windows 操作系统中,当可执行 exe 文件需要使用某个.dll 文件时,它会在以下几个地方寻找该文件:

首先,它会在与可执行文件相同的目录中查找该文件。
如果找不到该文件,则会在系统搜索路径中查找该文件。

因此,如果您的.dll 文件不在可执行文件所在的目录中,您可以采取以下措施来确保可执行文件能够找到并使用该文件:

  1. 将.dll 文件复制到可执行文件所在的目录中。
    将 DLL 文件复制到可执行文件所在目录中,可以让可执行文件在运行时直接从该目录下加载所需的 DLL 文件,避免了不同版本间冲突的问题。这是最常见和推荐的做法。

  2. 将.dll 文件添加到系统搜索路径中。
    将 DLL 文件添加到系统搜索路径中,需要修改系统环境变量,将 DLL 文件添加到 PATH 环境变量中。

  3. 将 .dll 文件放到系统目录中
    将 DLL 文件复制到 Windows 系统目录中,可以让操作系统在需要时自动加载这些 DLL 文件。不过这种方法需要管理员权限,并且可能会导致不同版本的 DLL 文件互相冲突。

  4. 在代码中显式指定.dll 文件的路径。
    在生成的可执行 exe 文件中调用 LoadLibrary 函数来加载 .dll 文件。LoadLibrary 函数会搜索一系列的文件路径来查找指定的 .dll 文件,因此你可以将 .dll 文件的路径添加到这些路径中,以确保 .dll 文件可以被找到。例如:

    HMODULE hModule = LoadLibrary(TEXT("path/to/your/dll.dll"));
    if (hModule == NULL) {// 加载失败,进行错误处理
    }
    

    如果你需要在 .dll 文件中使用其他的 .dll 文件,那么可以通过调用 SetDllDirectory 函数来添加其他的文件路径。例如:

    BOOL success = SetDllDirectory(TEXT("path/to/other/dll/files"));
    if (!success) {// 设置路径失败,进行错误处理
    }
    

    这样,当 .dll 文件需要使用其他的 .dll 文件时,它们就可以被找到。

    需要注意的是,使用动态加载的方式加载 .dll 文件需要在程序运行时进行,因此需要在适当的时机调用 LoadLibrary 函数来加载 .dll 文件,以确保 .dll 文件可以被找到并正确地使用。

总结:
通常第一种方法是最简单的解决方案,因为它不需要对系统配置进行任何更改,并且能够确保可执行文件能够找到所需的.dll 文件。


http://www.ppmy.cn/news/53043.html

相关文章

CentOS stream9下安装kubernetes1.19

配置docker的yum仓库 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 安装containerd yum install containerd 目前kubernetes不基于docker,而是基于 containerd.io ,所以不需要安装do…

用户界面对象的线程亲缘性第一篇: 窗口

不同的对象具有不同的线程亲缘性规则,但其基本原则来自古老的 16 位 Windows。 在 Windows 系统上,最重要的用户界面对象当然是窗口了。窗口对象有它自己的线程亲缘性。创建窗口的线程是与窗口具有不可分割关系的线程。非正式地说,线程”拥有…

c++11 标准模板(STL)(std::priority_queue)(三)

适配一个容器以提供优先级队列 std::priority_queue 定义于头文件 <queue> template< class T, class Container std::vector<T>, class Compare std::less<typename Container::value_type> > class priority_queue; priority_queu…

Leetcode 37 解数独

Leetcode解数独 题目描述题解1(按Board行列回溯&#xff1a;较直接) 题目描述 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次数字 1-9 在每一列只能出现一次数字 1-9 在每一个以粗实线分隔的…

Redis 主从复制

一、主从复制 1.简介 主从库之间采用读写分离的方式 读操作: 主库、从库都可以处理 写操作&#xff1a;首先写到主库执行&#xff0c;然后再将主库同步给从库。 实现读写分离&#xff0c;性能扩展 容灾快速恢复 2 主从复制步骤 创建一个目录 ,在root下创建一个myredis的目录…

销量破亿,董洁直播间凭何出圈?

近期&#xff0c;“没有五位数走不出”的董洁直播间火了…… 纵观这几年各大平台直播带货&#xff0c;火已不是什么新鲜事&#xff0c;而为何董洁的直播能火上热搜呢&#xff1f;本期&#xff0c;千瓜将解析董洁直播&#xff0c;同品牌方聊聊小红书直播的那些事儿。董洁「种草式…

RSA加解密三方调用

RSA三方调用 github项目demo 整体项目结构 ├─ExposedInterface 服务提供方的单独接口依赖包&#xff08;里面只有实体和暴露接口&#xff09; 根据服务提供者每次打包release 正式版本包 │ ├─src │ │ ├─main │ │ │ ├─java │ │ │ │ └─com │ │ │ │ └…

【Python】【进阶篇】7、Django模板系统

目录 7、Django模板系统1. Django的模板系统2. 模板系统的应用1) 模板传参2) render方法 7、Django模板系统 本节我们继续使用《Django视图函数》一节中的“Hello_my_django”函数来完成相关知识的讲解。 from django.http import HttpResponse def Hello_my_django(request)…