我有一个 DLL,它需要访问存储在主机应用程序的 STL 容器中的数据。因为 C++ 没有标准的 ABI,而且我想支持不同的编译器,所以应用程序和 DLL 之间的接口基本上必须保持纯旧数据。
对于向量,这相对简单。您可以简单地返回向量的内存块,因为它保证是连续的:
// To return vector<int> data
virtual void GetVectorData(const int*& ptr, size_t& count) const
{
if (!vec.empty())
ptr = &(vec.front());
count = vec.size();
}
现在,DLL 可以通过该接口对向量数据进行安全的只读访问。DLL 也可以包装它以将内容复制到自己的向量中。
但是 STL 列表(和双端队列)呢?是否有另一种直接的方法允许通过 DLL 边界进行访问?还是我必须求助于某种 GetFirst()/GetNext() 接口?我可能需要对很多列表执行此操作,因此最好有一个像矢量这样简单的解决方案。