Как перекомпилировать изменения в исходный файл VCL (Menus.pas)?

У нас есть модифицированные menus.pas.

В

<code>uses ...,Controls,...;
</code>

Компилятор выдал фатальную ошибку:

[DCC Fatal Error] Menus.pas(*): F2051 Unit Controls was compiled with a different version of Menus.TPopupMenu

пытался:

удалил все dcu в проекте.

строить

построить все

попытался добавить файл в путь к библиотеке, который приводит к добавлению папки db (также из vcl), а затем к

[DCC Error] jpeg.pas(872): E2065 Unsatisfied forward or external declaration: 'jpeg_save_markers'

который тупик.

удалил control.dcu (все 3), и delphi не знал, как автоматически их перекомпилировать, вместо этого сообщил, что Control.dcu отсутствует.

 David Heffernan06 мая 2012 г., 17:26
Вы должны убедиться, что вы не изменяете раздел интерфейса. Вам также может понадобиться явно установить параметры компилятора в заголовке измененного файла Menus.pas. Установите для них параметры Delphi по умолчанию. Узнайте, что они из себя представляют, создав новый проект, и нажмите Ctrl + O O
 TLama06 мая 2012 г., 16:37
Итак, вы изменилиMenus.pas в исходной папке Delphi? Вы должны заметить, что отладка и время выполнения*.dcu файлы хранятся в каталоге .. \ lib и, необязательно, в подкаталогах (в данный момент у меня есть только Delphi 2009 вручную, поэтому он может немного отличаться)
 ComputerSaysNo06 мая 2012 г., 16:34
IIRC, если вы изменяете файл из источника delphi, вам нужно перекомпилировать все в определенном порядке, я никогда этого не делал ...
 Sertac Akyuz06 мая 2012 г., 17:19
Лучше не меняйте файл ни в одной из стандартных папок delphi. Поместите все ваши измененные исходные файлы в свою собственную папку и включите эту папку в путь поиска параметров проекта (или в путь библиотеки в параметрах, если вы «всегда будете использовать измененные файлы»).
 LU RD07 мая 2012 г., 00:58
Похожие вопросы,How to recompile a specific unit from the VCL? а такжеCan I recompile the .PAS files used by the Delphi IDE? а такжеHow to patch a method in Classes.pas, Ответ Дэвида здесь более точный, хотя и под рукой по информации.

Ответы на вопрос(1)

Решение Вопроса

Make a copy the file in your project structure. Either add the file to your project, or make sure the search path finds your modified file. Make modifications, but only in the implementation section. You are not able to modify the interface section if you use any other units that themselves use the unit you are modifying. Explicitly set the compiler options at the top of the modified source file. Use default Delphi options, as found by pressing CTRL+O O in a default vanilla project.

Я полагаю, что один из последних двух пунктов - это то, что сбивает вас с толку.

 28 июн. 2017 г., 11:24
Ну вот что я получил при нажатииCTRL+O O в пустом проекте. Я вообще не знал о директиве компилятора по умолчанию в модифицированном VCL. Спасибо!
 28 июн. 2017 г., 11:15
@ Дэвид, я должен добавить{$MINSTACKSIZE $00004000}, {$MAXSTACKSIZE $00100000}, {$IMAGEBASE $00400000} также по умолчанию? или только по умолчанию$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1} (Delphi 5) - который генерируется сCTRL+O O.
 28 июн. 2017 г., 11:20
@kobik У моих юнитов просто есть{$R-,T-,H+,X+}, Я подозреваю, что в моих проектах параметры компиляции совпадают со всеми остальными. Добавление полного сайта, например, не повредит.{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-‌​,U-,V+,W-,X+,Y+,Z1}, Но тебе не нужно больше, чем я думаю.
 none07 мая 2012 г., 10:48
новая процедура была добавлена в xe: CloseMenu.

Ваш ответ на вопрос