回答
它是否正確,因爲它會起作用並做你期望的事情?假設你正在討論在類或類成員上使用_declspec(dllexport/dllimport),是的,你可以這樣做,它應該給你預期的結果 - 靜態數據可以在你的dll之外訪問,其他C++代碼可以訪問它規定C++訪問規範(public/protected/private)不會首先阻止外部訪問。
這是一個好主意嗎?就我個人而言,我不這麼認爲,因爲您不僅會在圖書館內向外部世界揭露課程內部,這意味着在一天結束時改變實施細節幾乎是不可能的。問問你自己,如果你是100%確定,如果這個類的接口和它的大部分實現將永遠不會改變...
導出的C++類意味着DLL客戶端必須使用與DLL相同的編譯器由於名稱改變和其他問題。這實際上是一個相當大的問題,我曾經不得不將C封裝器編寫到一堆C++類中,因爲客戶端程序已經切換到MSVC9,而DLL本身使用MSVC71。 [將DLL切換到MSVC90還有其他一些問題]。從那以後,我一直對這個導出類的業務持懷疑態度,並且更喜歡爲所有東西寫一個C封裝器。
現在,如果您願意支付出口類的價格,我會說導出靜態數據不會使問題變得更糟。可以說,在你可以導出的東西中,導出靜態常量是最安全的。即便如此,我寧願不這樣做,因爲像Timo說的,你現在被鎖定在這個實現中。
我工作的框架之一要求其客戶端提供一組錯誤代碼常量。隨着時間的推移,我們發現使用簡單的一堆常量太脆弱了,我們轉而採用OO設計。我們有一個默認的實現,它將返回常見的錯誤代碼,但是每個錯誤代碼都是使用虛擬函數訪問的,而虛擬函數可以被各個客戶端覆蓋 - 而且他們通過某些高級設備特定的錯誤處理來使用它。此解決方案證明了遠遠比基於導出常數的可擴展性更高的。
我建議您在輸出靜態變量之前認真考慮組件的演變情況。
類的(非靜態)數據成員上的dllexport(或導入)不執行任何操作。導出的「事物」是功能或全局數據(儘管這是一個值得懷疑的設計選擇)。類上的dllexport只是一個說「導出所有這些函數」的快捷方式。
- 1. C++調用類成員變量「屬性」是否正確?
- 2. C++類成員基數和聲明之間的映射是否正確?
- 3. 將Python翻譯爲C++,從成員函數返回新實例是否正確?
- 4. 這是訪問類的數據成員的正確方法嗎?
- 5. 確定是否用戶是組成員
- 6. 什麼是成員數據指針的正確賦值語句
- 7. 數據庫正常化是否正確?
- 8. 鎖是否正確完成
- 9. C++常量,正確性和const成員
- 10. C++ - 類不更新成員正確
- 11. 按值分配成員對象:我的假設是否正確?
- 12. 確定成員是否在(Javascript)超類
- 13. 數組排序C,是否正確?
- 14. C#中的數據導出到Excel的格式不正確
- 15. 操縱數據成員(C++)
- 16. C++結構數據成員
- 17. Selenium Webdriver:Java:驗證導入的數據是否正確的代碼
- 18. 導出Gridview到Excel:無法導出正確的數據顯示
- 19. 確定數據庫是否正常化
- 20. [repr(C)]是否傳播給子成員?
- 21. 成員函數指針不太正確
- 22. 正確處置成員TcpClient
- 23. 確定類成員的數據類型
- 24. 如何在C++中正確使用虛擬成員函數
- 25. 如何正確訪問C中的數組成員?
- 26. 這是AGAL輸出是否正確?
- 27. 導出靜態庫的成員函數
- 28. 是否有可能在一個DLL中的導出函數返回一個導出類的靜態成員?
- 29. Visual C++和SDL無法正確導出?
- 30. 沒有導出成員'DROPDOWN_DIRECTIVES'
你是什麼意思「出口數據成員」?讓他們公開? – Dima 2008-10-21 15:03:28