静态库、动态库及导入库

静态库

    1. 静态库扩展名为.lib,静态链接(即代码会直接编译进可执行文件)。静态库是一个或多个obj文件的打包。

    2. 在VC中使用静态库的方法:

    方法一:在项目属性中添加附加依赖项。

        若库目录不在系统和当前目录,选中工程,单击右键,属性-->VC++目录,在库目录中添加库文件所在路径;

        选中工程,单击右键,属性-->链接器-->输入,在"附加依赖项“右边选择编辑,输入要包含的静态库名称。

    方法二:在项目中直接添加库文件。

        选中工程,单击右键,添加-->现有项,在弹出的对话框中选择想要添加的静态库,点击确认。

    方法三:使用pragma预处理指令。如:      

#pragma comment(lib, ".../lib/test.lib")

    利用上述方法导入静态库后,就可在源码文件中包括.h文件,然后在源码文件中使用静态库函数。

    3. 在VC中生成静态库:

       选中工程,单击右键,属性-->常规,在"目标文件扩展名"后输入.lib,在"配置类型"中选择"静态库(.lib)"

动态库和导入库

    1. 和静态库不同,动态库不会编译进可执行文件中,多个程序引用动态库时,内存中实际只会有一份动态库的内容。

        用VC创建动态库时,实际生成两个文件,一个lib文件和一个dll文件,这个lib文件就是导入库。

        导入库是动态库的辅助库,导入库中不含代码,而是为链接程序提供信息,包含在.exe文件中建立动态链接时要用到的重定位表。

        导入库用于程序开发时,动态库用于程序运行时。

    2. 在项目中使用动态库的方法:

        方法一:  隐式加载: 这种方式和静态库的使用方法一样,对应有3种具体的方法,注意此时要包含的是导入库而不是动态库,依然需要头文件,代码中可直接使用头文件中的函数名,并且这种方式在运行时需要需要动态库。

        方法二:  显式加载(又称运行时动态链接):在代码中使用LoadLibrary()显式打开dll文件,使用GetProcAddress获取函数地址然后使用,使用完之后用FreeLibrary显式释放dll文件。这种方式不需要导入库及.h文件。

        使用隐式加载时,如果进程在启动时未找到dll,则操作系统将终止此进程。但使用显式加载时则进程不会被终止。

    3. 在VC中生成动态库和导入库:

        选中工程,单击右键,属性-->常规,在"目标文件扩展名"后输入.dll,在"配置类型"中选择"动态库(.dll)"

        注意: 对于要导出给外部程序使用的函数及数据,均应具有_declspec(dllexport)。如果dll源码中没有一个_declspec(dllexport),则不会生成导入库。

    4. DllMain函数:

        DllMain函数为dll的入口函数,该函数不是必须的。该函数在dll被加载进程地址空间时运行(即隐式加载时,在main()函数执行之前就已经运行;显式加载时,在LoadLibrary时运行)。


参考资料:

http://blog.chinaunix.net/uid-24517893-id-2495060.html

http://www.cnblogs.com/qinfengxiaoyue/archive/2012/05/27/2519703.html

关于DllMain()的详细说明,可参考:

http://blog.csdn.net/kroosafe/article/details/3454840



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值