C++ 使用COM跨CRT边界调用是否安全?

C++ 使用COM跨CRT边界调用是否安全?,c++,com,msvcrt,C++,Com,Msvcrt,我们正在将编译器从Visual Studio 2010(MSVC 10)升级到VS2013(MSVC 12)。显然,这涉及到CRT版本的改变;不可避免地,它还涉及到寻找没有VS2013版本的第三方库 我已经读过关于跨越不同CRT之间边界传递对象的危险,但是我提到的大多数第三方库都是通过COM向我们公开的 使用COM跨越CRT边界调用是否总是、永远或有时是安全的?如果是“有时”,是什么决定了它是否安全?这里重要的是什么电话实际上有问题。如果对象通过COM接口相互通信,则可以安全地将它们组合在一起。

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

我已经读过关于跨越不同CRT之间边界传递对象的危险,但是我提到的大多数第三方库都是通过COM向我们公开的


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

这里重要的是什么电话实际上有问题。如果对象通过COM接口相互通信,则可以安全地将它们组合在一起。在较旧和较新的模块中都是相同的COM。只有当您执行CRT调用,并且一个模块正在处理属于不同CRT版本的对象时,问题才会出现,例如,一个模块中的
new
,然后在另一个模块中的
delete
。当您传递COM指针并调用COM方法时,您不会遇到此问题。

将我自己的Q标记为的可能副本,因为我实际上不确定它是否回答了我的问题……那么我认为我们是安全的?跨越COM边界,我们只调用COM方法。我们通过
IObject*
、枚举、
VARIANT
s(特别是
VARIANT\u BOOL
)和
BSTR
传递内置(
long
等)、COM对象。我不相信我们还能通过任何考试。是的,你应该会没事的