VS加载动态库DLL的简单问题。

0zien0 2013-01-10 10:19:43
我用的是最简单的加载方法,直接把lib和dll都放到工程项目中。
先说说加载静态库的方法:
把lib放到工程项目中,然后在附加目录中加入静态库头文件的路径,就基本完成了。

问题是:
难道加载动态库的步骤仅仅是在加载静态库后,把dll复制到工程项目中就完事了?不用配置其他东西了?
我用的编译器是VS2008.

难道:不复制dll进工程项目中,就是静态加载,把dll复制进去就可以运行时加载了??

-----------------------------------------------------------
那我如何知道是否加载动态库成功呢?即使不复制dll到工程项目中,程序同样能运行(因为静态库本来就配置好了)
...全文
909 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
0zien0 2013-01-26
  • 打赏
  • 举报
回复
确实是我搞错了,因为生成动态库时,只产生了DLL没产生LIB,所以我还以为LIB是用静态库的LIB,后来修改代码后,再次生成动态库时,DLL和相应的LIB都一起生成了。
0zien0 2013-01-10
  • 打赏
  • 举报
回复
附上dll的代码: 头文件: #ifndef __TEST03_H__ #define __TEST03_H__ class Test03 { public: void printTest(); }; #endif // __TEST03_H__ 源文件: #include "test03.h" #include <iostream> void Test03::printTest() { std::cout << "Hello World!" << std::endl; } 我只是想试试如何自己编译dll,然后加载到工程项目中去
0zien0 2013-01-10
  • 打赏
  • 举报
回复
引用 1 楼 baichi4141 的回复:
程序在运行时,会自动按照一定的顺序搜索几个特定的文件夹,包括“可执行文件所在的文件夹”和“系统动态库存放文件夹”等 如果在这些地方找不到所需的动态链接库,则程序无法启动 如果在一个文件夹内找到了所需的动态链接库,则不再继续寻找 “即使不复制dll到工程项目中,程序同样能运行” 这说明,“复制dll到工程项目中”是一个毫无意义的行为 为什么能运行?一般来说,是……
不对啊,本来配置好静态库程序就能运行了。
baichi4141 2013-01-10
  • 打赏
  • 举报
回复
程序在运行时,会自动按照一定的顺序搜索几个特定的文件夹,包括“可执行文件所在的文件夹”和“系统动态库存放文件夹”等 如果在这些地方找不到所需的动态链接库,则程序无法启动 如果在一个文件夹内找到了所需的动态链接库,则不再继续寻找 “即使不复制dll到工程项目中,程序同样能运行” 这说明,“复制dll到工程项目中”是一个毫无意义的行为 为什么能运行?一般来说,是因为这个dll在你安装驱动或软件的时候已经被复制到了系统动态库存放文件夹,一般是c:\windows\system32\
Enter空格 2013-01-10
  • 打赏
  • 举报
回复
生成动态库DLL的时候,配套生成的.lib并不是静态库,而是此DLL的符号链接库。 楼主所说的链接方式,并不是动态加载DLL文件。 因为使用了.lib文件,所以是静态加载动态库,此时加载模块会在PE头中加入相关信息,加载模块启动时如果找不到DLL文件,则此模块无法启动。 使用LoadLibrary+GetProcAddress函数加载DLL,才是[color=#FF0000动态加载动态库[/color],这种方式加载动态库,不会在PE头中添加相关信息,所以加载模块即使找不到DLL文件,仍可正常启动,但涉及DLL的函数都无法正常使用。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧