关于网友提出的“ VS加载动态库DLL的简单问题。”问题疑问,本网通过在网上对“ VS加载动态库DLL的简单问题。”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: VS加载动态库DLL的简单问题。
描述:dll加载动态库
我用的是最简单的加载方法,直接把lib和dll都放到工程项目中。
先说说加载静态库的方法:
把lib放到工程项目中,然后在附加目录中加入静态库头文件的路径,就基本完成了。
问题是:
难道加载动态库的步骤仅仅是在加载静态库后,把dll复制到工程项目中就完事了?不用配置其他东西了?
我用的编译器是VS2008.
难道:不复制dll进工程项目中,就是静态加载,把dll复制进去就可以运行时加载了??
-----------------------------------------------------------
那我如何知道是否加载动态库成功呢?即使不复制dll到工程项目中,程序同样能运行(因为静态库本来就配置好了)
解决方案1: 生成动态库DLL的时候,配套生成的.lib并不是静态库,而是此DLL的符号链接库。
楼主所说的链接方式,并不是动态加载DLL文件。
因为使用了.lib文件,所以是静态加载动态库,此时加载模块会在PE头中加入相关信息,加载模块启动时如果找不到DLL文件,则此模块无法启动。
使用LoadLibrary+GetProcAddress函数加载DLL,才是[color=#FF0000动态加载动态库[/color],这种方式加载动态库,不会在PE头中添加相关信息,所以加载模块即使找不到DLL文件,仍可正常启动,但涉及DLL的函数都无法正常使用。
解决方案2: 程序在运行时,会自动按照一定的顺序搜索几个特定的文件夹,包括“可执行文件所在的文件夹”和“系统动态库存放文件夹”等
如果在这些地方找不到所需的动态链接库,则程序无法启动
如果在一个文件夹内找到了所需的动态链接库,则不再继续寻找
“即使不复制dll到工程项目中,程序同样能运行”
这说明,“复制dll到工程项目中”是一个毫无意义的行为
为什么能运行?一般来说,是因为这个dll在你安装驱动或软件的时候已经被复制到了系统动态库存放文件夹,一般是c:\windows\system32\
以上介绍了“ VS加载动态库DLL的简单问题。”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3716893.html