2
在將現有的單片C++ Builder VCL應用程序拆分爲exe + DLL時,我遇到了TApplication的問題。TApplication並將C++ Builder應用程序拆分爲DLL
的DLL項目和EXE項目已經啓用了以下選項,所以他們應該都共享內存管理器和VCL庫:
- 鏈接與動態RTL
- 與德爾福運行時庫 鏈接
- 鏈接運行時包
從我所瞭解的情況來看,這些選項是需要的問題,如內存分配和VCL組件操作跨越DLL邊界。
事情大多數工作。然而,全球TApplication的實例顯然是從DLL中的一箇中被初始化,而不是從exe文件內,有幾個不想要的結果:
- 系統:IsLibrary被錯誤地設置爲true。
- 應用程序 - >圖標未設置。
- 應用程序 - >手柄未設置。
- 因爲應用程序 - >拉手未設置,各種其他的問題就出來了:快捷鍵不工作,有與線程同步問題等
我可以通過設置應用程序 - 解決這些問題> Icon->從WinMain處理和調用Application-> CreateHandle,但我不確定這是否是正確的解決方案(特別是因爲the docs說「不要調用CreateHandle」)。
在共享VCL組件的同時將C++ Builder VCL應用程序拆分爲DLL的正確方法是什麼?
謝謝。這類作品,但它似乎沒有與C++代碼良好玩。程序包中的模板在程序包外部是不可見的,即使標準要求成員常量定義,編譯器也會拒絕成員常量定義,內聯函數很奇怪,鏈接程序不能找到帶有額外點的源文件名,跨平臺的C++文件必須標記爲與Delphi兼容的單元......除非有簡單的解決方案,否則這些問題似乎比我開始的時候更糟糕。 – 2013-05-01 19:41:59
@JoshKelley:我還沒有用過C++的包,但是我已經嘗試過了,我沒有看到很多這些問題。它們只是一種特殊的DLL。內聯:嗯,你會希望DLL也有麻煩。會員常量......奇怪......你能舉個例子嗎?德爾福兼容單位,你是什麼意思,用declspec?我建議的是對這些問題提出一個單獨的問題,或者對每個問題提出一個問題。軟件包肯定是由C++ Builder正式支持的,所以你可能比已知存在問題的某些東西(DLL)有更多的運氣。 – 2013-05-02 07:38:23
繼續:TApplication不是使用DLL時唯一會遇到的問題 - 整個Delphi類型系統和從它降序的所有類都會有相同的問題,因爲每個DLL都有自己的副本。 「在共享VCL組件時,軟件包對於您的需求至關重要」。 – 2013-05-02 07:39:38