我承認這個問題聽起來很一般。但畢竟,從DLL中導出類是一個普遍和困難的話題,並且坦率地說,我目前困惑於一個相當普遍的層面。我可以組織DLL中的類嗎?
簡短問題:C++和DLL中的面向對象編程如何配合在一起?
長的問題:閱讀this和this後,我有點失望和困惑,因爲我不知道如何面向對象編程可以用DLL的工作,如果DLL邊界不允許共享對象(假設兩個DLL使用了不同的編譯器或編譯器版本)。對於出口類的選項只有這些(如解釋here或here):
- 出口創建和刪除方法(C風格,懸擺指針的危險,沒有對象作爲參數,醜)
- 出口純虛類和一個工廠函數,它創建一個從純虛擬類派生的實際實現類的實例(需要繼承,刪除對象時需要刪除對象)
例如,我想將通用實用程序一個DLL中的類,然後在其他DLL中的幾個類中使用,它們本身在其他DLL中使用。我怎樣才能做到這一點?這是一個不明確的方式來組織我的課程?
獎勵問題:如果我導出一個具有指向實現的指針的類,這相當於導出純虛擬類和工廠函數嗎?或者導出的成員函數必須是虛擬的?
編輯:如果它很重要,我在使用Visual Studio 2010的Windows 7上。遷移vom較舊的Visual Studio讓我對此問題很敏感。
使用DLLs是一個非常實用的解決方案,當您進行小的更改時,必須等待很長時間才能讓程序編譯和鏈接。使用它們作爲一個庫,應該可以被任何編譯器設置的任何編譯器版本使用,好吧,沒有。二進制兼容性不是C++功能,必須由您添加,您已經知道需要什麼。 –
@Hans Passant:是否有替代DLL的方式來以可重用的方式組織源代碼?頭部實現可能?還要別的嗎? – Fabian