gpt4 book ai didi

c++ - 混合运行时是可行的解决方案吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:33 27 4
gpt4 key购买 nike

在我的公司,我们最近从 VC9 切换到 VC10。

我们迁移了我们的项目,但随后,负责人告诉我们,我们必须在我们的生产机器上保留一些使用 VC9 编译的基础通用 DLL 一段时间。

这些 DLL 使用自定义结构,其中一些包含 std::vectorstd::map 等。现在,我注意到标准容器的尺寸发生了变化:有些变大了,有些变小了。因此,我们的自定义结构的大小也发生了变化。

为了解决由大小变化引起的问题,我的一位同事想到了人为地增加我们结构的大小,以便可以补偿 future 成员大小的变化,以便无论我们使用什么运行时,结构都保持相同的大小,防止函数调用时的堆栈损坏。

就个人而言,我觉得这个“解决方案”很糟糕,因为虽然大小很重要,但结构的布局也很重要。对我来说,增加所有结构的内存占用以解决组织问题似乎是错误的。

简而言之,我的问题是:在函数原型(prototype)中使用非 C 类型时,甚至可以同时使用两个不同的运行时(使用所描述的技巧或任何其他技巧)吗?对于类似情况,您有什么好/坏的经历吗?

最佳答案

STL 从不保证不同主要版本之间的二进制兼容性。因此,如果您的 DLL 在接口(interface)处具有 STL 类,您应该为 DLL 的客户端和 DLL 本身使用相同的编译器和相同风格的 CRT。

如果您想构建可以安全地用于不同编译器版本的 DLL,您有一些选择,例如:

  1. 暴露一个纯C接口(interface)(DLL可以用C++写,但接口(interface)必须是纯C,C++异常不能跨越DLL边界)。
  2. 在 DLL 接口(interface)处公开抽象接口(interface),如本 article 中所述.
  3. 使用 COM

关于c++ - 混合运行时是可行的解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8877509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com