dllimport和dllexport

用法:在引用动态库时使用;
在动态库库头文件一般有下面宏定义:
#ifdef LIB_EXPORTS
#define EXPORTS_API __declspec(dllexport)
#else
#define EXPORTS_API __declspec(dllimport)
#endif

在编译库的工程里需要宏定义 LIB_EXPORTS
这个时候 EXPORTS_API 表示为输出属性,修饰函数或者类
例子:
void EXPORTS_API hello(int x);
class EXPORTS_API son : public father
{
}

在引用库的工程里,则不需要宏定义LIB_EXPORTS
这个时候EXPORTS_API 表示为输入属性,修饰函数或者类
例子:
void EXPORTS_API hello(int x);
class EXPORTS_API son : public father
{
}
总结:在库工程和引用库的工程里,该头文件是一样的,但是由于两个工程的宏定义问题,变量代表不同的意义.

使用动态链接为什么还需要静态库lib文件
在Windows上使用动态链接时,不光需要头文件 .dll文件 还需要一个.lib 文件。
不是动态链接吗?为什么还需要静态库.lib文件?

实际上,这个.lib文件并不是静态库,而是 导入库 文件,只是使用和静态库相同的扩展名而已。
静态库本身就包含了实际执行代码、符号表等等,所以只要头文件就可以了。
而动态链接而言,其实际的执行代码位于动态库中,需要导入库提供地址符号表等信息,确保程序找到对应函数的一些基本地址信息。
两个.lib文件大小差距很大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值