【发布时间】: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;
}
【问题讨论】:
-
导出为数组?
-
变量没有什么特别之处,你导入/导出它们的方式基本上和你做函数的方式一样
-
"我希望所有项目都使用相同的向量实例" - 你可能不这样做。全局变量名声不好,原因有很多。另外,研究“静态初始化惨败”。还要考虑一下共享库 (DLL) 可以随时加载/卸载的事实——如果拥有对象的 dll 被卸载会发生什么?我认为您想重新考虑您的设计以不想要/需要这个。
标签: c++ visual-studio dll