DLL文件中的多个类

时间:2016-05-18 06:29:31

标签: c++ dll

我所拥有的内容几乎是一个愚蠢和愚蠢的问题,但我无法在网上找到答案。 当我想创建一个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文件中?

1 个答案:

答案 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 {...};   
}