2016-04-28 83 views
1

在使用v110编译器构建的可执行文件中使用由v90编译器构建的COM DLL安全吗?在v110可执行文件中运行v90 COM DLL是否安全?

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

可执行文件针对dll的tlb构建。 都静态链接到MFC,并且都使用运行时库的/MT版本。

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

请问有人能为我澄清?

回答

8

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

COM规则是ABI 规则,包括与内存管理,线程规则等

不要试图破坏这些规则,永远

即使相同的编译器用于dll和exe。例如。不要在一侧分配new,在另一侧分配delete - 即使使用相同的编译器。

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


应用程序二进制接口

+0

谢谢您的回答。这非常有帮助。所以基本上,COM接口允许不同的语言和编译器一起愉快地工作,只要它们不违反ABI规则。你有链接到所有ABI规则? – TinyRacoon

+0

(ABI =应用程序二进制接口) – TinyRacoon

+0

是的,我也会添加它。 – Niall

相关问题