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? 的相关文章

  • 为什么存在 async 关键字

    浏览 msdn 9 频道视频时 我发现以下未答复的评论 希望有人能解释一下 我不明白 async 关键字的意义 为什么不直接允许 任何时候方法返回任务时都会使用await关键字 就像迭代器一样 可以在任何返回 IEnumerable 的方法
  • 如何使用 zlib 制作 .zip 文件

    我正在阅读zlib的文档 它相当详细 但我读到了这一行 输出数据将位于zlib格式 与 gzip 或zip formats http www zlib net zlib how html http www zlib net zlib how
  • 内联函数/方法

    声明 内联函数必须在调用之前定义 这个说法正确吗 EDIT 该问题最初是德语 内联功能穆森 弗 伊赫雷姆 奥夫鲁夫定义 sein 也许它对任何人都有帮助 是的 它是正确的 但只是部分正确 它可能正确地重新构建如下 内联函数必须在每个翻译单位
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • 如何将带有自定义分配器的 std::vector 传递给需要带有 std::allocator 的函数?

    我正在使用外部库 pcl 因此我需要一个不会更改现有函数原型的解决方案 我正在使用的一个函数生成一个std vector
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 无法解析远程名称 - webclient

    我面临这个错误 The remote name could not be resolved russgates85 001 site1 smarterasp net 当我请求使用 Web 客户端读取 html 内容时 出现错误 下面是我的代
  • 如何在 C++ 中将 CString 转换为 double?

    我如何转换CString to a double在 C 中 Unicode 支持也很好 Thanks A CString可以转换为LPCTSTR 这基本上是一个const char const wchar t 在 Unicode 版本中 知
  • 2D morton 码编码/解码 64 位

    如何将给定 x y 的莫顿代码 z 顺序 编码 解码为 32 位无符号整数 生成 64 位莫顿代码 反之亦然 我确实有 xy2d 和 d2xy 但仅适用于 16 位宽的坐标 产生 32 位莫顿数 在网上查了很多 但没有找到 请帮忙 如果您可
  • libxml2 xmlChar * 到 std::wstring

    libxml2似乎将所有字符串存储在 UTF 8 中 如xmlChar xmlChar This is a basic byte in an UTF 8 encoded string It s unsigned allowing to pi
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • C++ 错误 - “成员初始值设定项表达式列表被视为复合表达式”

    我收到一个我不熟悉的 C 编译器错误 可能是一个非常愚蠢的错误 但我不能完全指出它 Error test cpp 27 error member initializer expression list treated as compound
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • 二叉树中的 BFS

    我正在尝试编写二叉树中广度优先搜索的代码 我已将所有数据存储在队列中 但我不知道如何访问所有节点并消耗它们的所有子节点 这是我的 C 代码 void breadthFirstSearch btree bt queue q if bt NUL
  • asp.net网格分页的SQL查询

    我在用iBatis and SQLServer 使用偏移量和限制进行分页查询的最佳方法是什么 也许我添加该列ROW NUMBER OVER ORDER BY Id AS RowNum 但这只会阻止简单查询的数据访问 在某些情况下 我使用选择
  • 使用 mingw32 在 Windows 上构建 glew 时“DllMainCRTStartup@12”的多个定义

    我关注了这个主题 使用 mingw 使建筑物在 Windows 上闪闪发光 https stackoverflow com questions 6005076 building glew on windows with mingw 6005
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 类中不允许使用不完整类型,但类模板中允许使用不完整类型

    以下为无效代码 struct foo struct bar bar x error field x has incomplete type struct bar int value 42 int main return foo x valu
  • 防止 Ada DLL 中的名称损坏

    有没有一种简单的方法可以防止在创建 Ada DLL 时 Ada 名称被破坏 这是我的 adb 代码 with Ada Text IO package body testDLL is procedure Print Call is begin

随机推荐

  • 在 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