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

2024-01-25

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

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

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

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

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

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


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

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

  1. 曝光一个pure C接口(DLL可以用C++编写,但接口必须是纯C的,并且C++异常不能跨越DLL边界)。
  2. Expose 抽象接口在 DLL 接口处,如本节所述article http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx.
  3. Use COM.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

混合运行时是可行的解决方案吗? 的相关文章

随机推荐

  • 无法调用基类的受保护函数?

    我无法在基类中调用受保护的函数 为什么 它看起来像这样 class B B2 public virtual f1 B 0 protected virtual f2 B codehere class D public B public vir
  • Matlab 中的相关可观测属性。有效吗?

    在 Matlab 类中 声明在语法上似乎是正确的property那是依赖者 计算未存储 和可观察的在同一时间 考虑代码 properties Access private instanceOfAnotherClass end propert
  • Android 上有时会忽略 LD_LIBRARY_PATH

    我有一个 Android 应用程序 它会生成许多与我随包分发的库动态链接的本机可执行文件 为了启动这些二进制文件 我使用 LD LIBRARY PATH 环境变量让它们知道从中加载库的位置 但在某些设备上这根本不起作用 LD LIBRARY
  • 如何将无头铬模块与AWS Lambda捆绑在一起?

    我尝试将 Puppeteer 与 Lambda 结合使用 但是 在无服务器部署中 由于超过 250mb 未捆绑包大小限制 Lambda 会出错 因此 为了突破限制 我改用了 Puppeteer 核心 它不包含铬 这需要引用可执行文件的路径来
  • 是否有库或其他方法可以进行 128 位数学运算?

    我正在编写一个加密应用程序 需要使用 128 位整数 除了标准的加 减 乘 除和比较之外 我还需要幂和模函数 有谁知道可以做到这一点的库或其他实现 如果不是 128 位 是否有 64 位选项可用 查看GNU 多精度算术库 http gmpl
  • 如何在react中为状态分配prop值

    我有一个覆盖层 它是从另一个 React 组件启动的 该组件有一个也会自行更改的按钮 当用户单击按钮时 更改就会发生 然后按钮会更改其类名 它还向作为覆盖层的子组件发送一个 prop 值 叠加层会根据属性以及是否单击添加一个类 一切都进展顺
  • 哪个 openid / oauth 库可将 django 项目连接到 Google Apps 帐户?

    我正在为一家使用 Google Apps 登录的公司开发一个 Intranet django 项目 不使用 GAE 所以我希望我的用户能够使用他们的 google 帐户登录来登录我的 django 项目 OpenID 似乎很合适 尽管也许
  • 在ggplot2中自定义“scale_color_gradient2”

    我想在我的图像图中使用我自己的特定颜色 我对 ggplot2 很陌生 所以看了它的手册here http docs ggplot2 org current scale gradient2 html 旧链接不存在 现在是here https
  • TFS 2005下永久删除

    如何永久删除 TFS 2005 源代码管理下的文件夹 文件 我知道关于tf destroy命令 但这仅适用于 TFS 2008 我也知道关于CodePlex 上的 TFS PowerPack http tfspowerpack codepl
  • 用于验证 Active Directory 对象 SID 的正则表达式

    我正在寻找一种方法来验证从 Active Directory 插入的对象 SID 是否有效 是否可以使用preg match or preg match all 我在网上查找了用于此验证的正则表达式 但我找不到任何东西 Example si
  • Swift UIAlertController,文本中带有 url

    我有这个代码 func alertBox txt String let ac UIAlertController title MyTtle message More information in my website preferredSt
  • Select2 占位符问题

    我有一个 Select2 多选 html 元素 渲染时不显示占位符 但如果我选择并删除该项目 则会显示占位符 我不知道如何让它发挥作用 请指教 最初 选择时 移除物品后 Code Html DropDownListFor m gt m Ve
  • sizeof(array) 在运行时如何工作?

    我读过 C 中的 sizeof 运算符是在编译时解释的 并且由于在编译时编译器知道数组大小及其类型 因此 sizeof 能够计算数组占用的字节数 但是 sizeof 如何适用于以下代码 include
  • 在 SQL 中聚合

    我有一个看起来像这样的表 Conversion Date User Name Last Date Touch Touch Count 7 15 2017 A 6 17 2017 1 7 16 2017 B 6 24 2017 2 7 19
  • GCDAsyncSocket 服务器仅在第一次接收数据

    每次当我按下发送按钮时客户端都会发送消息 但服务器仅在第一次接收消息 服务器有什么问题 Server void viewDidLoad super viewDidLoad asyncSocket GCDAsyncSocket alloc i
  • AngularJS 在工厂和控制器之间跨模块共享数据

    我有一个 angularjs 应用程序 它有几个模块 主要模块如下所示 var app angular module mainMod apiService app controller MainCtrl function Socket sc
  • 如何使用 Terraform 的文件配置程序从本地计算机复制到虚拟机?

    我是 Terraform 的新手 到目前为止 我已成功在 Azure 上启动并运行了基本的 VM 加上资源管理器修剪 我想到的下一个任务是让 Terraform 将文件从本地计算机复制到新创建的实例中 理想情况下 我正在寻找一种解决方案 每
  • 无法连接到 localhost/127.0.0.1 android

    我是 android 开发的新手 并尝试通过改造库调用 android 中的本地 NET Web api 服务 在 IIS 上启动我的 Web api 后 我收到此错误无法连接到 localhost 127 0 0 1 android 当我
  • 使用 JavaScript 获取用户代理

    我想要一个可以获取用户的用户代理并将其支持到属性的脚本 我正在制作网站问题联系表 我通常需要知道用户使用的浏览器 如何检测用户代理字符串并将其支持为输入元素的值 我的 html 看起来像这样
  • 混合运行时是可行的解决方案吗?

    在我的公司 我们最近从 VC9 切换到 VC10 我们迁移了我们的项目 但是负责人告诉我们 我们必须在我们的生产机器上保留一些用 VC9 编译的基本通用 DLL 一段时间 这些 DLL 使用自定义结构 其中一些包含std vector st