请教动态链接库直接使用头文件包含和LoadLibrary载入在使用上有什么区别呀
请问动态链接库直接使用头文件包含和LoadLibrary载入在使用上有什么区别呀?
请问动态链接库直接使用头文件包含和LoadLibrary载入在使用上有什么区别呀?
另外请问,使用LoadLibrary动态加载编译的时候为什么不会出链接问题呢?
还有就是动态链接库本身都是使用时候动态加载的了,使用LoadLibrary有什么特别的好处吗?哪些情况下会用到呀?
------解决方案--------------------
头文件包含
=========
楼主的这个意思是 用 lib载入的意思吧?
没有头文件包含的说法滴······
lib 是dll的导入库,
这个方法很简单,
但是有2个缺点:
1 程序一开始运行就需要载入整个dll,无法载入程序就不能开始运行;
2 由于载入的是整个dll,需要耗费资源较多
------解决方案--------------------
上面的方法,
也被称为 “dll静态加载法”
LoadLibrary载入,
是对应的 “动态加载”方式,
它不在程序运行时候载入dll,
不需要lib导入,
使用程序函数 LoadLibrary 载入库,
并使用 API 获得 dll 中的函数入口地址。
相对的,
它只导入需要的函数, 资源节俭,
程序启动无需载入 dll, 效率高,
即使dll没有,程序也可以正常启动(但是执行到需要dll部分就over了)
问题是,
它的操作方式比较麻烦,
从载入、获得函数入口、释放资源,全部需要手动控制。
------解决方案--------------------
基本知识:
SDK编程笔记 - DLL篇
http://www.lihuasoft.net/article/show.php?id=759
------解决方案--------------------
Windows动态链接库基础知识 :
http://topic.****.net/t/20051028/11/4356175.html
------解决方案--------------------
(瞌睡虫·星辰) ,给点机会,全让你说了。
------解决方案--------------------
Windows的动态链接库原理
http://www.xingworld.net/show.html?root=2&branch=11&leaf=57&id=3462
这个从原理到例子,到应用,
都很清晰。
------解决方案--------------------
虫子全说了
一种是编译期静态导入,一种是运行期动态加载。
后者灵活性高,但也相对麻烦点.
------解决方案--------------------
帮顶,jf
------解决方案--------------------
都说全了,至于要看书的话,windows核心编程里也有专门的章节介绍
------解决方案--------------------
狒狒能连续3次以上发贴,牛比!
------解决方案--------------------
LoadLibrary--运行时动态载入
上一个是相对来说滴--静态载入
------解决方案--------------------
windows核心编程 bucuo
------解决方案--------------------
编译期静态导入
运行期动态加载
------解决方案--------------------
mark~
------解决方案--------------------
动态加载DLL的步骤如下:
HINSTANCE DLL库实例名=LoadLibrary(_T( "DLL库名.dll "));//加载解密函数库
typedef BOOL (CALLBACK *函数类型名)(函数参数1,函数参数2...... );//定义函数类型,格式一
//typedef BOOL (__cdecl *函数类型名)(函数参数1,函数参数2...... );//定义函数类型,格式二,看原DLL函数的格式而定
函数类型名 使用时的函数名=(函数类型名)GetProcAddress(DLL库实例名,_T( "DLL库里的原函数名 "));//定义函数
最后要记得freelibrary。
静态加载DLL的步骤如下:
1(配置头文件路径):选择项目-> 属性-> C/C++-》常规-》附加包含目录:设置引用头文件路径
2(配置DLL和Lib文件路径):选择项目-> 属性-> 连接器-》常规-》附加库目录:设置DLL路径
3(加载Lib文件):选择项目-> 属性-> 连接器-》输入-》附加依赖项:输入要加载的Lib文件名(加载多个Lib文件时,以回车为分隔符)
4(该主应用程序.exe的生成目录,和要加载的DLL、Lib放在同一目录):选择项目-> 属性-> 连接器-》常规-》输出文件
------解决方案--------------------
mark
------解决方案--------------------
什么年代的帖子了?谁翻出来的啊
------解决方案--------------------
那么动态加载和静态加载生成的.exe文件在运行的时候占用内存的大小有没有区别呢?
请问动态链接库直接使用头文件包含和LoadLibrary载入在使用上有什么区别呀?
另外请问,使用LoadLibrary动态加载编译的时候为什么不会出链接问题呢?
还有就是动态链接库本身都是使用时候动态加载的了,使用LoadLibrary有什么特别的好处吗?哪些情况下会用到呀?
------解决方案--------------------
头文件包含
=========
楼主的这个意思是 用 lib载入的意思吧?
没有头文件包含的说法滴······
lib 是dll的导入库,
这个方法很简单,
但是有2个缺点:
1 程序一开始运行就需要载入整个dll,无法载入程序就不能开始运行;
2 由于载入的是整个dll,需要耗费资源较多
------解决方案--------------------
上面的方法,
也被称为 “dll静态加载法”
LoadLibrary载入,
是对应的 “动态加载”方式,
它不在程序运行时候载入dll,
不需要lib导入,
使用程序函数 LoadLibrary 载入库,
并使用 API 获得 dll 中的函数入口地址。
相对的,
它只导入需要的函数, 资源节俭,
程序启动无需载入 dll, 效率高,
即使dll没有,程序也可以正常启动(但是执行到需要dll部分就over了)
问题是,
它的操作方式比较麻烦,
从载入、获得函数入口、释放资源,全部需要手动控制。
------解决方案--------------------
基本知识:
SDK编程笔记 - DLL篇
http://www.lihuasoft.net/article/show.php?id=759
------解决方案--------------------
Windows动态链接库基础知识 :
http://topic.****.net/t/20051028/11/4356175.html
------解决方案--------------------
(瞌睡虫·星辰) ,给点机会,全让你说了。
------解决方案--------------------
Windows的动态链接库原理
http://www.xingworld.net/show.html?root=2&branch=11&leaf=57&id=3462
这个从原理到例子,到应用,
都很清晰。
------解决方案--------------------
虫子全说了
一种是编译期静态导入,一种是运行期动态加载。
后者灵活性高,但也相对麻烦点.
------解决方案--------------------
帮顶,jf
------解决方案--------------------
都说全了,至于要看书的话,windows核心编程里也有专门的章节介绍
------解决方案--------------------
狒狒能连续3次以上发贴,牛比!
------解决方案--------------------
LoadLibrary--运行时动态载入
上一个是相对来说滴--静态载入
------解决方案--------------------
windows核心编程 bucuo
------解决方案--------------------
编译期静态导入
运行期动态加载
------解决方案--------------------
mark~
------解决方案--------------------
动态加载DLL的步骤如下:
HINSTANCE DLL库实例名=LoadLibrary(_T( "DLL库名.dll "));//加载解密函数库
typedef BOOL (CALLBACK *函数类型名)(函数参数1,函数参数2...... );//定义函数类型,格式一
//typedef BOOL (__cdecl *函数类型名)(函数参数1,函数参数2...... );//定义函数类型,格式二,看原DLL函数的格式而定
函数类型名 使用时的函数名=(函数类型名)GetProcAddress(DLL库实例名,_T( "DLL库里的原函数名 "));//定义函数
最后要记得freelibrary。
静态加载DLL的步骤如下:
1(配置头文件路径):选择项目-> 属性-> C/C++-》常规-》附加包含目录:设置引用头文件路径
2(配置DLL和Lib文件路径):选择项目-> 属性-> 连接器-》常规-》附加库目录:设置DLL路径
3(加载Lib文件):选择项目-> 属性-> 连接器-》输入-》附加依赖项:输入要加载的Lib文件名(加载多个Lib文件时,以回车为分隔符)
4(该主应用程序.exe的生成目录,和要加载的DLL、Lib放在同一目录):选择项目-> 属性-> 连接器-》常规-》输出文件
------解决方案--------------------
mark
------解决方案--------------------
什么年代的帖子了?谁翻出来的啊
------解决方案--------------------
那么动态加载和静态加载生成的.exe文件在运行的时候占用内存的大小有没有区别呢?