类静态变量的导出

现在一般工程都比较多,很多情况下都有基础的一些工具库,关于库的导出和其他工程引用这个库的时候有些需要注意的,这里记录一下,以便学习。

一般在要导出的库里都会有如下的宏定义:目的是代码简洁

#ifndef _DLL_H_
#define _DLL_H_//防重复定义
#if BUILDING_DLL
#define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
#define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
#endif /* _DLL_H_ */</span>

然后在要导出的类前加上这个导出声明。

如下所示:

class DLLIMPORT MyClass
{
public:
	void DoSomething();
};

然后在cpp文件中会有DoSomething的实现。

如果你的一个类里全部是内联函数,cpp文件里没有内容,那么这个类其实你就可以不用导出了,因为只有包含这个头文件,这个类的所有功能都能实现。

但是如果这个类里有定义一个静态变量,如下:

class MyClass
{
public:
	void DoSomething()
	{
		//...
	}
	DLLIMPORT static int s_iMyint;
};
这个时候这个静态变量必须在cpp文件里初始化。而且如果要用到它的话,你就必须将它导出。即在你的工程里

__declspec(dllexport) 导出这个变量,

而且特殊的是,在其他工程引用这个库的时候需要

__declspec(dllimport)导入这个变量。

这个时候最开始的那个宏就很有用了,一般你的基础库工程里都有 BUILDING_DLL

这个定义,对应 DLLIMPORT   _declspec(dllexport)

所以在基础库里是导出这个变量,

在你的其他工程里,没有BUILDING_DLL

这个定义,所以这个工程里包含这个头文件时,其实对应DLLIMPORT   _declspec(dllimport)

这样就实现了导入和导出两个操作了。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值