gpt4 book ai didi

c++ - 将一个大文件分解成一个 DLL 的陷阱?

转载 作者:行者123 更新时间:2023-11-28 03:14:30 26 4
gpt4 key购买 nike

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

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

最佳答案

拥有一个定义 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 类添加装饰器。

关于c++ - 将一个大文件分解成一个 DLL 的陷阱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17358476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com