2011-05-19 67 views
4

我正在一個delphi IDE專家,現在爲了避免依賴關係問題,我在想重建這個專家作爲一個DLL專家,正如其中一個建議answers,現在我的專家(編譯爲bpl)訪問ScreenApplication全局變量(Delphi IDE的實例),所以我想知道如果我編譯我的專家作爲一個DLL我仍然可以訪問這些變量,我也想知道which are the main differences between a bpl delphi expert and a dll delphi expert?bpl delphi專家和dll delphi專家之間的差異

回答

5

我應該將我的嚮導編譯爲DLL還是包?無需重新啓動 IDE(因此更容易調試),但是它們可以在IDE中創建單位命名衝突 ,從而使包更容易加載和卸載 。 命名嚮導的單元與另一個加載的設計時包中的單元名稱 匹配時發生衝突。在這種情況下, 這兩個軟件包不能同時加載到 。建議的解決方法 將前綴爲「唯一」前綴的所有單位名稱 。例如,GExperts的 使用「GX_」作爲其單位的名稱前綴 。

this約OTA非常好的來源:GExperts

1

當你訪問一個全局變量時,那些全局變量對你的DLL來說是全局的,而不是全局的BDS.exe。我不確定,但我認爲你的DLL會有自己的Screen和Application全局變量,如果你鏈接了Forms和VCL的核心。

那些屬於IDE本身的東西是通過Open Tools Api(OTA)訪問的。我相信你通常不會在IDE和專家之間共享任何對象,並且如果你想這樣做,那將是有問題的。任何你所做的繞過OTA的事情都會容易以奇怪的方式突破,特別是在未來版本的IDE中。

依賴問題當然是不使用基於BPL的包的一個重要原因,但我認爲更重要的原因是保持工具內部和IDE內部之間的完全分離。

請記住,DLL目標,如可執行目標,是靜態鏈接的。這是差異的核心。如果您的專家提供的功能僅使用合法的公用文檔OTA接口,那麼轉移到DLL應該沒有問題。如果您使用BPL可能的後門黑客,那麼我無法進一步爲您提供建議。

+3

一個DLL可以運行包將建成了。 – 2011-05-19 20:07:19