将大文件分解为一个DLL的陷阱?

时间:2013-06-28 06:24:18

标签: c++ visual-studio-2010 dll multiple-inheritance dllexport

我不是在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。

非常感谢任何指导或帮助。 谢谢

1 个答案:

答案 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类添加装饰器。