2013-03-04 17 views
1

我一直在開發一段時間。而且這些怪獸會不時出現在MFC中,wxWidgets代碼,但我無法找到任何有關他們的確切操作的信息。任何人都可以用幾個術語解釋DYNAMIC_CLASSes?

據我所知,他們出現在dynamic_cast被集成到核心C++之前。其目的是允許動態創建對象,以及運行時動態強制轉換。

但是,這是我找到的所有信息都以此結束。

我遇到了一些示例代碼,它使用DLL中的DECLARE_DYNAMIC_CLASS和IMPLEMENT_DYNAMIC_CLASS,並用於導出的類。這種結構讓我感到困惑。

爲什麼這樣做?這是一種基於插件的方法,您可以在其中調用LoadLibrary,然後調用CreateDynamicClass以獲取可以轉換爲所需類型的指針?

DECLARE/IMPLEMENT_DYNAMIC是否在DLL邊界上工作?既然班級對DLLEXPORT來說不是很安全,並且在這裏我們有一個自定義的RTTI表格以及現有的問題。

是否有可能從另一個DLL的DYNAMIC_CLASS派生我的類,它將如何工作?

任何人都可以請解釋我是什麼這些事情,或者我可以在一個主題上找到兩個以上的句子嗎?

+0

你可能會覺得這個答案有幫助:http://stackoverflow.com/questions/14318993/why-is-declare-dynamic-implement-dynamic-nessary-for-dynamic -downcast/14319634#14319634 – snowdude 2013-03-04 12:10:34

回答

1

這東西追加addional類型信息類,它允許RTTI在運行無關的方式,爲工廠創造類和許多其他的事情的可能性。你可以在COM,QMetaObject等找到類似的方法。

+0

它與交叉模塊方法混合嗎?如果對象是在一個模塊中聲明的,並在另一個模塊中使用?類型查找表一般存儲在哪裏? – Coder 2013-03-04 23:40:51

+0

作爲http://docs.wxwidgets.org/trunk/overview_rtti.html表示,存儲爲靜態'wxClassInfo'情況下的鏈接列表。跨模塊邊界使用它是安全的。但使用這些類的安全性取決於它們的交叉模塊安全性,就像在COM中一樣。 'QueryInterface'是dynamic_cast'的'COM模擬,但如果你的接口使用像'的std :: VECTOR'類(內存佈局可以在調試/發佈/運行版本不同)它們的用法是unasafe – kassak 2013-03-05 12:55:35

0

你看過DECLARE/IMPLEMENT_DYNAMIC的定義嗎?

在MS世界中,所有大寫字母通常表示一個宏,因此您可以查找定義並嘗試從中找出它正在做的事情。如果你在Visual Studio中,你可以點擊一個按鍵來跳轉到定義 - 看看它說了什麼,然後看看並試着從那裏開始工作。

相關問題