在使用v110编译器构建的可执行文件中使用使用v90编译器构建的COM dll是否安全?
可执行文件在运行时通过COM接口使用v90 dll(它不是#import
。
可执行文件针对dll的tlb构建。
两者都静态链接到MFC,并且都使用运行时库的/MT
版本。
我的理解是可能的,但不安全。由于存在关于使用的问题(即内存分配不同,因此无法在dll中分配对象并在可执行文件中删除,因为这会导致意外行为)。
请有人为我澄清一下吗?
答案 0 :(得分:8)
是的,这是安全的。如果您遵守COM规则。
COM规则是ABI 1 规则,包括与内存管理,线程等相关的规则。
不要试图破坏这些规则。
即使dll和exe使用相同的编译器。例如。不要在一方分配new
而在另一方分配delete
- 即使您使用相同的编译器。
COM不限制或强制执行任何一方的特定语言或平台 - 有许多提供COM互操作性的技术,语言和平台,例如:在.Net中实现的COM对象将与导入对象的C ++ exe一起使用,只要双方都遵守规则。
1 应用程序二进制接口