c++ 如何声明一个全局的vector,供2个不同的dll里的文件使用
时间: 2024-12-08 14:22:00 浏览: 13
在C++中,如果你想在一个全局的`std::vector`中存储数据,并使其能够被两个不同的DLL(动态链接库)访问,你需要遵循一些特定步骤:
1. **命名空间**:
- 使用命名空间防止全局变量名冲突。例如,你可以创建一个全局命名空间,如`GlobalData`。
```cpp
namespace GlobalData {
std::vector<YourDataType> sharedVector;
}
```
2. **外部宣告(extern)**:
- 在每个DLL头文件中,仅声明而不初始化这个全局变量,通过`extern`关键字表示其存在。
**DLL A.h**:
```cpp
#include "GlobalData.h"
// DLL A uses the vector
extern std::vector<YourDataType> &getSharedVector();
```
**DLL B.h**:
```cpp
#include "GlobalData.h"
// DLL B also uses the vector
extern std::vector<YourDataType> &getSharedVector();
```
3. **实现共享**:
- 在某个单例模块或者公共的源文件(非DLL部分),提供初始化并返回该向量的函数,这样只有这一个地方负责创建和管理它。
**common.cpp or singletons.cpp**
```cpp
#include "GlobalData.h"
std::vector<YourDataType> &getSharedVector() { return GlobalData::sharedVector; }
```
4. **构建规则**:
- 确保所有使用这个全局向量的DLL在链接时都链接到包含`common.cpp`或单例模块的地方,以便将`getSharedVector()`函数的实际实现链接进去。
5. **注意线程安全**:
- 如果有可能多个线程同时修改这个向量,记得添加适当的同步措施(如互斥锁或原子操作)。
阅读全文