在运行时在v110可执行文件中使用v90 COM dll是否安全

Is it safe to use at runtime a v90 COM dll in a v110 executable?

本文关键字:COM dll 是否 安全 v90 运行时 v110 可执行文件      更新时间:2023-10-16

在使用v110编译器生成的可执行文件中使用使用v90编译器生成的COM dll是否安全?

v90 dll由可执行文件在运行时通过COM接口使用(它不是#import ed)。

可执行文件根据dll的tlb生成。两者都静态链接到MFC,并且都使用运行库的/MT版本。

我的理解是,这是可能的,但并不安全。由于存在关于使用的注意事项(即内存分配不同,因此对象不能在dll中分配,也不能在可执行文件中删除,因为这会导致意外行为)。

请有人帮我澄清一下好吗?

是的,它是安全的。只要你遵守COM规则。

COM规则是ABI1规则,包括与内存管理、线程等相关的规则。

永远不要试图颠覆这些规则

即使dll和exe使用相同的编译器。例如,不要将new放在一边,将delete放在另一边进行分配,即使使用相同的编译器也是如此。

COM不会限制或强制任何一方使用特定的语言或平台-有许多技术、语言和平台提供COM互操作性,例如,只要双方都遵守规则,在.Net中实现的COM对象将与导入该对象的C++exe一起工作。


1应用程序二进制接口