加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C从子目录加载DLL?

发布时间:2020-12-16 05:04:13 所属栏目:百科 来源:网络整理
导读:我是C的“隐藏/黑暗的地方”的新手,我想知道如何从我当前可执行文件运行的目录中的不同目录或子目录中加载.dll文件 例如: ./MyAppDirectory /MyApp.exe /SomeDLL.dll /AnotherDLL.dll /SubDirectory /SomeDLL2.dll /AnotherDLL2.dll /YetAnotherDLL.dll /..
我是C的“隐藏/黑暗的地方”的新手,我想知道如何从我当前可执行文件运行的目录中的不同目录或子目录中加载.dll文件

例如:

./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”文件夹中输入“等”.

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

> 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完全不同 – 在显式情况下,您必须使用LoadLibrary,然后使用GetProcAddress查找函数的地址,并且您必须使用函数指针来调用函数 – 这通常只用于插件或类似的功能,其中DLL提供少量的功能(通常只是一个工厂函数来创建一个对象来做一些具有通用接口类的东西,并且每个DLL具有相同类型的功能创建一个对象来做它应该做的任何事情).

在隐式加载中,您不需要在代码中执行任何操作来使用DLL,并且DLL中的函数似乎就像它们硬链接到应用程序中一样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读