现在的位置: 首页 > 综合 > 正文

dll中导出命名空间中的变量

2014年02月25日 ⁄ 综合 ⁄ 共 680字 ⁄ 字号 评论关闭

占位待编。

以下只限于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;

 

抱歉!评论已关闭.