占位待编。
以下只限于VC环境。
dll中导出变量和导出函数不同。
在导出函数的时候,只需要__declspec(dllexport)修饰函数的声明即可,外部使用时不需要导入(import)。
变量的话这么使用会有链接错误,因为变量如果使用的话需要导入。
命名空间参合进来后就更乱了。
首先要确保变量的声明在dll工程编译时看到的是导出(dllexport),而使用者看到的是导入(dllimport),这就要用到预编译。
dll中定义:
# ifdef BUILD_DLL
# define MU_DECLSPEC __declspec(dllexport)
# else
# define MU_DECLSPEC __declspec(dllimport)
# endif
dll工程中增加预编译选项 BUILD_DLL,这样就实现了”横看成岭侧成峰,dll和exe看到的各不同。”
dll中变量声明头文件:
/** 日志输出。 */
namespace mcu
{
class MU_DECLSPEC CLog
{
public:
CLog(void);
virtual ~CLog(void);
public:
/** 输出日志。 */
CLog& operator << ( LPCTSTR strMsg );
// .......(略)
};
}
/** 导出变量声明。 */
extern MU_DECLSPEC mcu::CLog tlog;
dll中变量定义cpp:
MU_DECLSPEC CLog mcu::tlog;
使用者(exe)包含头文件后直接使用:
#include <?头文件?>
mcu::tlog << 10;