2016-04-28 79 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

相關問題