【问题标题】:Is it safe to call across CRT boundaries using COM?使用 COM 跨 CRT 边界调用是否安全?
【发布时间】:2014-11-20 13:31:09
【问题描述】:

我们正在将我们的编译器从 Visual Studion 2010 (MSVC 10) 升级到 VS2013 (MSVC 12)。显然,这涉及到 CRT 版本的变化;并且不可避免地还涉及查找没有可用 VS2013 版本的第三方库。

我已经阅读了在不同 CRT 之间传递对象的危险,但我提到的大多数第三方库都是通过 COM 向我们公开的。

使用 COM 跨 CRT 边界调用是否总是、从不或有时是安全的?如果“有时”,是什么决定了它是否安全?

【问题讨论】:

标签: c++ com msvcrt


【解决方案1】:

这里重要的是实际有问题的调用。如果对象通过 COM 接口相互通信,那么将它们以任意组合混合是安全的。在较旧和较新的模块中,它是相同的 COM。问题仅在您进行 CRT 调用时出现,并且一个模块正在使用属于不同 CRT 版本的对象进行操作,例如new 在一个模块中,然后 delete 在另一个模块中。传递 COM 指针和调用 COM 方法时不会出现此问题。

【讨论】:

  • 那我觉得我们安全了?跨越 COM 边界,我们只调用 COM 方法。我们通过IObject*、枚举、VARIANTs(尤其是VARIANT_BOOL)和BSTRs 传递内置函数(long 等)、COM 对象。我不相信我们会通过其他任何东西。
  • 是的,你应该没事
猜你喜欢
  • 2021-04-16
  • 1970-01-01
  • 2013-12-12
  • 2011-03-11
  • 2011-06-09
  • 2018-12-24
  • 1970-01-01
  • 2018-10-06
相关资源
最近更新 更多