2010-10-21 102 views

回答

5

由於BPL是一個DLL,去BPL方式:更容易。

+0

同意。 BPL具有原生VCL支持,而普通DLL不支持。在非BPL DLL邊界上傳遞VCL對象並不是一個好主意。 – 2010-10-21 19:34:59

+1

我嘗試了BPL的方式,但它並不像我想的那麼容易。其實我需要一個「單個文件包」的方法,這在BPL情況下是不可行的。所以我正在製作DLL插件。 – Paul 2017-02-22 13:24:19

0

它可以完成,但它是一個工作的地獄,讓它工作沒有錯誤或內存問題。更糟糕的是,您將在應用程序中使用兩個VCL,一個在可執行文件中,另一個在DLL中。你的框架會嘗試引用DLL VCL,它將提供與EXE VCL完全不同的信息。特別是在檢查全局屏幕和應用程序變量時。
儘管如此,框架只不過是一種特殊的窗口控件,就像窗體一樣。你可以從DLL中導出一個函數,它會返回一個TFrame類型的值。你的應用程序可以調用這個函數,從而創建框架,以任何方式使用它,使用所有其他框架。儘管如此,它不會在框架中提供有關附加功能的任何特定信息。
接下來要處理的事情是同步EXE和VCL相關的DLL之間的數據。這不是很漂亮。另外,使用Tab鍵通過屏幕上的控件選項卡時,您可能會遇到一些問題,因爲Tab鍵將無法在框架外標籤。你會注意到更多這樣的怪事。
我一直在使用這種方式使用框架的簡單應用程序。我和另外兩個人花了兩個月時間得到了一些工作解決方案,這種解決方案在沒有內存泄漏和其他問題的情況下工作得很好。在我們開始這個項目之前,這似乎是一個好主意。之後,我們決定它並不是我們想要的解決方案,所以我們將DLL的代碼與可執行代碼合併爲一個可執行文件。這樣更好。
雖然我們確實使用了另一種替代方法。我們開始在mainform中使用webbrowser組件。該DLL將包含一個HTML頁面,很好地格式化,以及一些在使用某些特定功能時將被調用的方法。我們在一個簡單的測試應用程序中工作,並取得了良好的效果,但隨後公司開始了第11章的工作......我的僱主因與某些客戶的交易不當而陷入了僵局,給公司帶來了鉅額債務。因此一個有趣的項目結束了......