我所拥有的内容几乎是一个愚蠢和愚蠢的问题,但我无法在网上找到答案。 当我想创建一个DLL项目(在现有的c ++项目中)时,我读到我需要在.h文件的开头实现以下几行:
#ifdef _EXPORTING
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif
我查看了MSDN中的示例:
// MathFuncsDll.h
#ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport)
#else
#define MATHFUNCSDLL_API __declspec(dllimport)
#endif
现在我想了解,我是否需要更改" _EXPORTING" " CLASS_DECLSPEC"对于我制作的每一个新课程? 例如,如果我创建一个名为" foo"在与#34; MathFuncsDll.h"相同的项目中我需要在.h文件的开头添加以下行:
// FooDll.h
#ifdef FOO_EXPORTS
#define FOO_API __declspec(dllexport)
#else
#define FOO_API __declspec(dllimport)
#endif
或者项目的所有.h文件中的某些行是否相同?
另外,如果我使用namespace
将整个dll作为一个引用并从中提取类,我是否需要将using namespace *NAME*
放在每个.h文件中?
答案 0 :(得分:2)
不,您不需要为每个类创建新的宏:
class MATHFUNCSDLL_API Foo {...};
class MATHFUNCSDLL_API Boo {...};
class MATHFUNCSDLL_API MyNewClass {...};
对于第二个问题:不要在头文件中使用名称空间:"using namespace" in c++ headers
您的标题如下所示:
#pragma once
namespace foo {
class MATHFUNCSDLL_API Foo {...};
class MATHFUNCSDLL_API Boo {...};
class MATHFUNCSDLL_API MyNewClass {...};
}
<强> EDITED 强>
// mylibdef.h
#pragma once
#ifdef _EXPORTING
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif
// myclass1.h
#pragma once
#include "mylibdef.h"
namespace mylib {
class CLASS_DECLSPEC MyClass1 {...};
}
// myclass2.h
#pragma once
#include "mylibdef.h"
namespace mylib {
class CLASS_DECLSPEC MyClass2 {...};
}