C++ 从子目录加载 DLL?

2024-01-04

我是 C++ 的“隐藏/黑暗地方”的新手,我想知道如何从当前可执行文件运行的不同目录或子目录中加载 .dll 文件

Ex:

./MyAppDirectory
  /MyApp.exe
  /SomeDLL.dll
  /AnotherDLL.dll
  /SubDirectory
    /SomeDLL2.dll
    /AnotherDLL2.dll
    /YetAnotherDLL.dll
    /...

因此,“MyApp.exe”会自动从其根文件夹“MyAppDirectory”加载“SomeDLL.dll”和“AnotherDLL.dll”,但我也希望能够加载“SomeDLL2.dll”、“AnotherDLL2.dll”、“YetAnotherDLL”。 “MyAppDirectory”文件夹内的“SubDirectory”文件夹中的“dll”等。

我一直在进行一些搜索,从我发现的唯一解决方案是:

  • 1)修改可执行文件的工作目录。
  • 2) 将 DLL 文件放入 Windows 根目录中。
  • 3)修改PATH环境变量。

但它们都有一些不好的一面(这里不值得一提),而且这不是我真正需要的。另一种解决方案是通过“应用程序特定路径!”其中涉及使用 Windows 注册表,并且似乎比前面提到的稍好一些。

但是,我需要能够使用 C++ 在“MyApp.exe”内部执行此操作,而不需要使用外部方法。

我使用的是 MinGW 4.7.2,我的 IDE 是 Code::Blocks 12.11,我的操作系统是 Windows XP SP3 Pro x86。

任何参考、教程、文档、示例等均被接受,感谢您的宝贵时间:D


如果您没有显式加载 DLL(“手动”,在代码中使用LoadLibrary(...)),那么你必须将 .dll 放在 Windows 将查找 DLL 的位置,这几乎意味着你在问题中讨论的三个选项之一。

使用时LoadLibrary,您可以指定 DLL 的相对或绝对路径。

请注意,显式加载 DLL 和隐式加载 DLL 是完全不同的 - 在显式情况下,您必须使用LoadLibrary,然后使用GetProcAddress要查找函数的地址,您必须使用函数指针来调用函数 - 这通常仅用于插件或类似功能,其中 DLL 提供少量函数(通常只是一个工厂函数创建一个对象来执行具有通用接口类的操作,并且每个 DLL 具有相同类型的函数来创建一个对象来执行它应该执行的任何操作)。

在隐式加载中,您无需在代码中执行任何操作即可使用 DLL,并且 DLL 中的函数看起来就在那里,就好像它们硬链接到应用程序中一样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 从子目录加载 DLL? 的相关文章

  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 按成员序列化

    我已经实现了template
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 在 Firefox Addon 中获取当前浏览器 url

    我在一个面板中 我想获取当前的浏览器 URL 到目前为止没有任何效果 这是我测试过的 唯一能返回任何东西的东西 我得到类似的东西resource jid0 18z0ptaugyu0arjkaoywztggyzg at jetpack 然后是
  • ASP.NET Core 1.0 中无法访问 System.Messaging/MSMQ

    我一直在尝试使用 MVC 6 和其他一些较新的 Web 开发工具 Angular 2 0 等 并且在设置利用 MSMQ 的网页时遇到了一些问题 作为参考 我使用的是 VS2015 Update 2 我相信它仍然是 RC1 当我第一次尝试弄乱
  • 获取Python JSON来序列化日期时间

    有一些我想使用 JSON 序列化的嵌套对象 问题是某些属性包含datetimes 当我尝试序列化这些 pbject 时 Python 抛出异常 TypeError datetime datetime 2012 6 5 17 49 35 67
  • 如何编写用于文件上传的 Node.js Express API?

    网上有很多关于 Node js Express 框架文件上传的示例 但大多数人都在使用multer 所有这些都从表单加载文件 但我的情况有所不同 我的应用程序将从手机中选择图像并上传到服务器 通过使用 Ionic 中的 cordova fi
  • 定义自定义 D3 符号

    我正在尝试在 D3 中开发自定义形状 但我对 Javascript 不太了解 并且不确定该形状是什么D3 形状 https github com d3 d3 shape图书馆正在幕后做事 特别是 我不确定什么是default函数于符号 js
  • Kurento安装未满足的依赖关系

    我正在尝试在 Ubuntu Trusty 14 04 中安装最新稳定版本的 Kurento V 6 0 不幸的是 我收到了陌生人的消息 Output The following packages have unmet dependencie
  • 为什么 DisplayFormat DataFormatString 不起作用?

    我的视图模型中有一个属性 如下所示 Editable false Display Name Date DisplayFormat DataFormatString 0 yyyy MM dd ApplyFormatInEditMode tru
  • 验证:根据父模型的属性值包含在轨道中

    我有两个型号Project和 任务 其中项目有很多任务并且任务属于项目 现在在我的Task模型我正在使用项目中的属性对字段进行验证 validates effort inclusion gt 1 project effort 这会导致错误m
  • 在java中实现一个简单的泛型函数时编译错误?

    这是我的代码 public class ArrayAlgorithm public static void main String args TODO Auto generated method stub return public sta
  • pymongo - 消息长度大于服务器最大消息大小

    线for doc in collection find is timeline valid True 给出消息长度错误 如何获取所有集合而不出现错误 我知道关于find limit 但我不知道如何使用它 Code from openpyxl
  • 从 MySQL JSON 数组中获取不同的值

    我得到了一个 MySQL 数据表 其中包含一个包含值列表的 JSON 列 约束表 ID CONSTRAINT TYPE CONSTRAINT VALUES 2 testtype 801 751 603 753 803 我想要的是一个不同的
  • 使用 PHP 客户端为 Google Calendar API 设置推送通知

    我想设置Google 日历 API 的推送通知 https developers google com google apps calendar v3 push每当 Google 日历 api 上的特定资源发生更改时 我的服务器都会收到通知
  • c#:为什么使用 DLL?

    我正在开发一个大型 C 项目 我想知道为什么人们在他们的应用程序中使用 DLL 我知道 dll 文件 如果我错了 请更正 包含一些函数 但为什么我们不将这些函数放入我们的主 c 应用程序中呢 Thanks 大部分都在答案中总结了对于这个问题
  • H.264 over RTP - 识别 SPS 和 PPS 帧

    我有来自 IP 摄像机的原始 H 264 流 封装在 RTP 帧中 我想将原始 H 264 数据放入文件中 以便我可以将其转换为ffmpeg 因此 当我想将数据写入原始 H 264 文件时 我发现它必须如下所示 00 00 01 SPS 0
  • 由于索引导致记录数量增加,SQLite 插入速度变慢

    原问题 背景 众所周知 SQLite需要微调 https stackoverflow com questions 1711631 how do i improve the performance of sqlite实现大约 50k 插入 秒
  • 何时在表单 ID 前添加冒号前缀

    我有两种形式的两个数据表 forma and formg 每个表格里面都有一个p dataTable groupsa and groupsg 在每个数据表中都有一个显示图像的自定义列 h graphicImage 称为fava and fa
  • jQuery mouseoverIntent 插件在父级悬停时显示/隐藏 div,但悬停时保持显示

    我有一个按钮 当鼠标悬停在其上方时 会在其正下方显示一个 div 当悬停 鼠标悬停 时 div 消失 这一切都运行良好 但现在我需要将 div 保留在按钮下方 显示用户是否将鼠标悬停在该 div 上 以与 div 内的内容进行交互 目前这是
  • 如何编写向上一层然后向下进入另一个目录的路径

    我正在尝试打开一个文件Java程序 比如Program java 使用相对路径 我有两个目录如下 ProjectWork Business Scenarios SC01 txt ProjectWork SourceCode Program
  • 获取 MPMediaItem 添加到 iTunes 库的日期

    是否可以 我在 MPMediaItemProperty 字符串中没有找到类似的内容 也许私有API 查看文档 方法列表没有对应的字段 这让您可以选择延长MPMediaItem与一个新的MPMediaItemProperty自己填写 添加日期
  • C++ 从子目录加载 DLL?

    我是 C 的 隐藏 黑暗地方 的新手 我想知道如何从当前可执行文件运行的不同目录或子目录中加载 dll 文件 Ex MyAppDirectory MyApp exe SomeDLL dll AnotherDLL dll SubDirecto