如何正确导出 DLL 中的矢量

Posted

技术标签:

【中文标题】如何正确导出 DLL 中的矢量【英文标题】:How to export a vector in a DLL correctly 【发布时间】:2019-03-12 19:45:50 【问题描述】:

我在一个 DLL Visual Studio 项目中有一个向量,我想在我的可执行项目和另一个 DLL 中使用它。我希望所有项目都使用相同的向量实例。我不希望每个项目都创建自己的实例。我怎样才能做到这一点?

//  DLL A project
//  A.h
extern std::vector<int> ids;

//  A.cpp
std::vector<int> ids;

//  DLL B project
//  B.h
void foo();

//  B.cpp
#include "A.h"

void foo()

    ids.push_back(2);




//  executable project
//  main.cpp
#include "A.h"
#include "B.h"

int main()
   
    foo();
    ids.push_back(1);

    //  should print 21
    for(auto i : ids)
    
        std::cout << i << std::endl;
    
    return 0;

【问题讨论】:

导出为数组? docs.microsoft.com/en-us/cpp/cpp/… 变量没有什么特别之处,你导入/导出它们的方式基本上和你做函数的方式一样 "我希望所有项目都使用相同的向量实例" - 你可能不这样做。全局变量名声不好,原因有很多。另外,研究“静态初始化惨败”。还要考虑一下共享库 (DLL) 可以随时加载/卸载的事实——如果拥有对象的 dll 被卸载会发生什么?我认为您想重新考虑您的设计以想要/需要这个。 自鸣得意:***.com/a/48350295/434551. 【参考方案1】:

必须将此添加到我的 DLL 项目和可执行项目中。 USE_DLL 仅在包含 .h/.cpp 的 DLL 项目中定义。

#ifdef USE_DLL
#define DllAPI   __declspec( dllexport )
#else
#define DllAPI   __declspec( dllimport )
#endif

【讨论】:

以上是关于如何正确导出 DLL 中的矢量的主要内容,如果未能解决你的问题,请参考以下文章

从 DLL 导出包含 `std::` 对象(矢量、地图等)的类

如何调试 DLL 中的代码

spss图片不能导出

如何将 PSD 文件中的所有图层导出为 PDF 矢量以在 Xcode 6 中使用资产目录

如何在 OpenGL 中绘制 3D 矢量?

如何隐藏 DLL 中的导出函数