Phi*_*l H 7 c++ dll stl loose-coupling visual-studio
在DLL边界暴露STL容器是不是一个好主意,一般不可能的(见这个答案为何,而这其中大约在DLL边界露出一个std ::列表).我需要能够在用不同的(VC08/VC10 +)编译器编译的DLL和EXE之间传递数据; 这个Q只涉及一切都是一样的.
揭露它们的最佳方式是什么?向量与列表有点不同,因为内存保证是连续的,所以如果我只需要一个双向的const向量,我可以只提供块的开始和结束指针到dll中的函数吗?dll还需要返回一些像向量数组的结构.
我想知道一个包含开始和结束指针的结构:
template <typename T>
struct vecWrapper<T> {
T* begin;
T* end;
}
// in the dll
int func(vecWrapper<double> numbers);
Run Code Online (Sandbox Code Playgroud)
这是明智的吗?据推测,从函数返回的任何内容都需要一个析构函数(在dll端),它会破坏它所指向的东西.
你已经成功了。该标准要求向量元素在内存中是连续的,并且除非您使用向量的分配器玩游戏,否则向量元素不会被堆栈分配,因此始终可以将向量的数据表示为开始和结束指针(或一个开始指针和一个大小,如果这是你的事)。你所拥有的应该可以正常工作。
不过,我不确定这有多大用处。 std::vector除了自动内存管理之外,并没有真正为您提供任何东西,而您并不想要这样;否则,您在 DLL 中构造的任何向量在被破坏时都会释放您的原始双精度数组。您可以通过复制数组来解决这个问题,但您已经说过您也不想这样做。STL 算法在指针上工作得很好,所以也许不需要在 DLL 中进行转换。
| 归档时间: |
|
| 查看次数: |
3493 次 |
| 最近记录: |