Linux 共享内存vector,C++:何时需要std :: vector的共享内存分配器?

我已经写在VC++ 6服务包6.一个Win32 DLL让我们把这个DLL作为FirstLayer。我没有访问FirstLayer的源代码,但我需要从托管代码中调用它。问题是,FirstLayer大量使用std :: vector和std :: string作为函数参数,并且没有办法将这些类型直接封装到C#应用程序中。

Second_Layer

,我能想到的是先创建写在VC++ 6.0的Service Pack 6另一个win32的DLL让我们把这个DLL作为 “SecondLayer” 的解决方案。 SecondLayer充当FirstLayer的包装。此图层包含std :: vector的包装类,因此std :: vector不会在此图层中的所有函数参数中显示。我们把std :: vector的这个包装类称为StdVectorWrapper。

该层不使用任何新的或删除操作来分配或释放内存,因为这是由std :: vector在内部处理的。

Third_Layer

我还创建了一个VC++ 2005类库作为SecondLayer的包装。这个包装器完成将非托管SecondLayer转换为托管代码的所有肮脏工作。我们把这个图层称为“ThirdLayer”。

与SecondLayer类似,该层在处理StdVectorWrapper时不使用new和delete。

Fourth_Layer

更有甚者,我创建了一个C#2005控制台应用程序调用ThirdLayer。我们将这个C#控制台应用程序称为“FourthLayer”。

呼叫序列总结

FourthLayer(C#2005) - > ThirdLayer(VC++ 2005) - > SecondLayer(VC 6) - > FirstLayer(VC 6)

的问题

我注意到,“System.AccessViolationException:尝试读取或写入受保护的内存”异常被抛出,我怀疑是由于SecondLayer内部的std ::矢量分配内存whic h对于ThirdLayer访问非法。

这证实了我的想法,因为当我在VC++ 2005中重新编译FirstLayer(模拟)和SecondLayer时,问题完全消失。但是,重新编译FirstLayer的生产版本是不可能的,因为我没有源代码。

我听说为了摆脱这个问题,我需要在C++中为StdVectorWrapper类中的SecondLayer的std :: vector编写共享内存分配器。我不完全明白为什么我需要共享内存分配器以及它如何工作?任何想法?

在互联网上是否有任何现成的源代码,我可以在SecondLayer中编译和使用我的代码?

请注意,我无法为此使用boost库。

2009-12-06

Lopper

+0

忘记我的第一个答案。那是错的。 –

2009-12-07 22:30:59

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值