這是一個問題(剩下的只是所以你可以告訴我,我做的全部都是錯的)。防止Delphi MDI應用程序在外部DLL中創建TApplication
有沒有什麼辦法可以確保第一個要運行的二進制文件(即我的可執行文件)是第一個初始化vcl.controls.pas的文件?
我問this question a few months ago和我想出如何到那裏解決它,並同步再次合作只是膨脹了2009年德爾福
現在,我們已經有了德爾福XE2和相同的症狀發生。 TThread.Synchronize鎖定,直到系統空閒或您將鼠標移動到活動窗體上,導致程序超慢。我可以在Delphi 2009中重新創建問題,因爲我很幸運,發現源代碼是一個非迂迴鏈接的DLL,但我不認爲這是XE2的情況。我不知道爲什麼XE2決定以不同於Delphi 7或2009的方式初始化代碼,但根據我對另一個問題的回答,TThread並沒有真正改變,所以它必須在別的地方。
那麼,我一直在通過我的主MDI應用程序的初始化,它似乎在鏈接的DLL內調用TApplication.Create(發生在VCL.Controls.pas的初始化中)。我不能說我明白爲什麼這是一個問題,因爲我使用相同的運行時軟件包(VCL,RTL等)構建了所有的東西。
在我看來,該DLL沒有使用運行時軟件包...當你使用運行時軟件包時,應該只有一個引用到所有VCL的VCL。 – Nat 2012-01-12 00:29:06
除非有一些隱藏的.dproj奇怪,我可以確認每個DLL都使用確切的保存運行時軟件包,包括VCL。實際上,我通過將有問題的DLL的'external'調用轉換爲調用'loadlibrary'和'getprocaddress'的delphi函數來解決這個問題。 – 2012-01-12 14:08:41