我不是在MSVC ++ 2010中创建DLL的经验,可能只是学习曲线的一部分。目前我有一个非常大的文件,里面有大约10个不同的类。我必须将文件分解为多个文件,并将相关的类移出到同一个文件中。所以在继续之前想要向有经验的开发人员了解我的情况。
如下所示
// Header
namespace collections
{
classA
classB
ClassC
ClassD : ClassA,ClassB
}
// CPP
namespace collections
{
classA
{
// Implementations
}
// Rest of the classes
}
分解后分离文件
// ClassA.h
namespace Collections
{
ClassA
}
// ClassB.h
namespace Collections
{
ClassB
}
// Implentations etc
我主要关心的是dllexport / dllimport存储类属性的使用 由于该文件将被分解,我将不得不使用以下
#ifdef MAKEDLL
# define EXPORT __declspec(dllexport)
#else
# define EXPORT __declspec(dllimport)
#endif
针对要导出/导入它们的类。但是将这些行放在将要创建的每个头文件中(使用一个名称空间“Collections”),这会在编译或代码生成步骤时产生任何不良影响吗?我在线查看并发现人们最抱怨链接器错误/警告,其中特定成员被重新定义或在创建DLL时未找到。这肯定是一个已经解决的问题,因为我不知道哪个是最好和最合适的方式。 我需要在最后创建一个DLL。我不需要创建多个DLL。
非常感谢任何指导或帮助。 谢谢
答案 0 :(得分:2)
有一个公共头文件定义EXPORTS
宏没有问题:
<强> mydll.h 强>
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
并将此头文件包含在其他头文件中:
<强> ClassA.h 强>
#include "mydll.h"
namespace Collections
{
class MYDLL_API ClassA {
// ...
}
}
<强> ClassA.cpp 强>
#include "ClassA.h"
// ...
<强> ClassB.h 强>
#include "mydll.h"
namespace Collections
{
class MYDLL_API ClassB {
// ...
}
}
......等等。您可以将所有这些文件(头文件和.cpp实现文件)放在一个DLL中,在DLL项目设置中定义MYDLL_EXPORTS
(它由VS2010 DLL向导自动完成)。
这里没有什么奇怪的。你永远不会重新定义任何东西。
您只需使用方便的MYDLL_API
向所有DLL API类添加装饰器。