我们正在将编译器从Visual Studion 2010(MSVC 10)升级到VS2013(MSVC 12)。显然,这涉及到CRT版本的变化;并且不可避免地还涉及寻找没有VS2013版本的第三方图书馆。
我已经了解了跨越不同CRT之间的边界传递对象的危险,但我提到的大多数第三方库都通过COM向我们展示。
使用COM调用CRT边界是否始终,从不或有时安全?如果"有时",什么决定它是否安全?
答案 0 :(得分:2)
这里重要的是什么电话实际上有问题。如果对象通过COM接口相互交谈,那么可以将它们以任意组合方式混合。在较旧和较新的模块中它是相同的COM。只有在进行CRT调用时才会出现问题,并且一个模块正在使用属于不同CRT版本的对象进行操作,例如: new
在一个模块中,然后delete
在另一个模块中。传递COM指针并调用COM方法时没有这个问题。