2016-07-24 131 views
0

如果我需要建立一個dll 只有由C++ applicaton消耗。 如果我去創建COM DLL,什麼是好處或缺點(在性能或任何方面)。COM DLL的C + + dll

我已經通過這LINK它沒有很好地回答我的問題。

謝謝!

+0

如果您的DLL只能在一個程序中使用,只是靜態鏈接它。 –

+1

你會發現很容易的缺點。 COM的主要優點是語言和運行時獨立性。這聽起來不像是一個功能,如果它是用C++編寫的並且只能從C++程序中使用。但事實上,C++沒有ABI。您可以使用任意C++編譯器構建的程序,使用任意編譯選項來使用您的DLL。你不會馬上得到這個好處,只會在晚些時候。 –

回答

3

您發佈的鏈接中的答案(COM vs non-COM DLL)解決了主要相關問題。如果那didn't answer my question well那麼你應該考慮更狹窄的框架問題。

除了已經在其他主題中提到的內容之外,還有一些注意事項。

  • 正在被其他C++代碼使用的C++ DLL可以公開完整的C++接口。參見例如Using dllimport and dllexport in C++ ClassesYou can declare C++ classes with the dllimport or dllexport attribute. These forms imply that the entire class is imported or exported.

    相比之下,一個COM DLL只能發佈接口,這些接口對語言無關緊要,對C++不太友好。見例如What Is a COM Interface?

  • 與上一點相關的DLL C++接口是非常有與任何使用它的C++代碼強烈耦合。極少數情況下,這意味着DLL和客戶端代碼都需要使用相同的編譯器和相同版本進行編譯。此外,只要DLL導出的類發生更改(包括private更改),潛在的所有客戶端代碼都需要重新編譯。

    相比之下,COM接口是與客戶端代碼更加鬆散耦合的ABI合約(What is Application Binary Interface (ABI)?)。從本質上講,只要發佈的接口不會更改,DLL代碼就可以隨意更改,而不需要客戶端重新編譯。

至於性能,這是不成熟的比較,也不可能不很多更多的細節第二猜測。 C++COM接口具有截然不同的語義和功能。