将一个大文件分解为一个DLL的陷阱
Pitfalls for breaking up a large file into one DLL?
我在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
将一个decorator添加到所有DLL API类中。
相关文章:
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL
- 从 .lib 文件创建一个.dll文件
- 我可以用C++/WinRT编写一个DLL,供windows桌面应用程序(而不是UWP)或Unity插件使用吗
- 将 std::string 作为参数从一个 DLL 传递到另一个 DLL 引发访问冲突错误
- Java加载DLL,该DLL从JNI中的另一个DLL导出方法
- 如何在另一个 DLL 上使用 '/DELAYLOAD' 的 DLL
- 在一个 DLL 中嵌入所有必需的 DLL
- 用C++为java构建一个dll,它正在调用另一个dll(Eclipse上的JNI)
- 是否有从另一个DLL中加载DLL的最佳实践
- 如果你链接到一个DLL,如果该DLL丢失,是否可以启动你的可执行文件
- 第一次尝试创建一个包含许多类的DLL,捆绑在一个DLL中
- 如何正确删除从另一个DLL接收的派生对象
- 在 jmpq 上崩溃到另一个 dll 中的函数与 mingw64
- 将一个 dll 导入另一个 dll C++
- Visual Studio,C++,在另一个DLL导出的类中使用DLL导出的类
- 从另一个 dll 链接动态 dll 会导致错误
- 将一个C++ DLL 加载到 matlab 中,该 matlab 调用另一个 DLL 中的函数
- 用C++中的另一个Dll调用Dll
- LNK2019错误一个DLL链接到MFC DLL
- 导出另一个dll的静态成员