__declspec(dllexport)、__declspec(dllimport)详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cstringw/article/details/51981250
#ifdef  DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

/**************************************************************

DLL中 ifdef块的作用:

此段代码由编译器自动生成,为了自动设置方法、变量、类的导出与导入。

1、编译器悄悄在C/C++选项->命令行->所有者选项 中加入:/D "DLL_EXPORTS"
   目的是在该项目上下文定义一个名为“DLL_EXPORTS”的宏定义。相当于在
   该头文件加上了 #define DLL_EXPORTS。
   注意:需要手工修改的话需要在C/C++选项->预处理器。

2、通过第一条宏定义判断DLL_API类型是 导出:__declspec(dllexport)
   还是导入:__declspec(dllimport)。

3、在该DLL项目,毫无疑问DLL_API应属于导出,但是在DLL的使用者却需要
   导入类型,因为使用者需要包含该头文件、其上下文不会有DLL_EXPORTS
   定义,所以在使用者看来DLL_API是一个是导入类型。

缺陷:使用该DLL,需要避免定义DLL_EXPORTS。

**************************************************************/

2016年7月21日

阅读更多

__declspec( dllimport )和__declspec( dllexport )

11-08

别人写的一个String类,我在我的项目中引用这个头文件,debug 模式下,弹出 应用程序配置不正确,调了很久,没点思路,哪位大侠遇到过这样的问题!万分感谢rn[code=c]#ifndef __String_h__rn#define __String_h__rnrn#include "XXXXXExport.h"rn#include "XXXXXHeader.h"rnrnnamespace XXXXXCorernrn class String;rnrn typedef std::list StringList;rn typedef StringList::iterator StringListIter;rnrn typedef std::vector StringVector;rn typedef StringVector::iterator StringVectorIter;rnrn typedef std::map MapString;rn typedef MapString::iterator MapStringIter;rnrnclass _XXXXXXExport Stringrn rn public:rn String()rn String(std::string str):m_str(str)rn String(char * str):m_str(str)rn String(const char * str):m_str(str)rn String(const String &str):m_str(str.m_str)rn virtual ~String()rn std::string str()const return m_str;rn bool empty()const return m_str.empty();rn long size() return m_str.size();rn std::string &str_ref() return m_str;rn void to_upper() boost::algorithm::to_upper(m_str);rn void to_lower() boost::algorithm::to_lower(m_str);rn void trim() boost::algorithm::trim(m_str);rn bool starts_with(const String &value) return boost::algorithm::starts_with(m_str,value.m_str);rn bool ends_with(const String &value) return boost::algorithm::ends_with(m_str,value.m_str);rn bool equals(const String &value) return boost::algorithm::equals(m_str,value.m_str);rn StringVector split(String &separator);rn bool contains(const String &value) return boost::contains(m_str,value.m_str);rn bool operator==(const String &value)const return value.m_str == m_str;rn bool operator!=(const String &value)const return value.m_str != m_str;rn String operator+(const String &value)const std::string temp = m_str; temp+= value.m_str;return temp;rn String &operator+=(const String &value) m_str += value.m_str;return *this;rn bool operator<(const String &value)const return m_str < value.m_str;rn protected:rn std::string m_str;rn ;rnrn static const String BLANK;rnrn#endif[/code]rnrn[code=c]rn#ifndef __XXXXXXExport_h__rn#define __XXXXXXExport_h__rnrn#include "XXXXXHeader.h"rnrn#if defined XXXXXCore_EXPORTSrn# define _XXXXXCoreExport __declspec( dllexport )rn#elsern# define _XXXXXXCoreExport __declspec( dllimport )rn#endifrnrnclass _XXXXXExport boost::noncopyable_::noncopyable;rnrn#endifrn[/code]rn

没有更多推荐了,返回首页