Предупреждения компилятора Delphi, указывающие на собственные модули Delphi - PullRequest
8 голосов
/ 16 мая 2009

В Delphi 2007, работая над проектом, который включает в себя пользовательский компонент, я получаю этот набор предупреждений как первые четыре в сообщениях, когда я делаю полную сборку (но не когда я делаю прямую компиляцию): *

[DCC Warning] Dialogs.pas(1426): W1002 Symbol 'TFileOpenDialog' is specific to a platform
[DCC Warning] Dialogs.pas(1446): W1002 Symbol 'TFileSaveDialog' is specific to a platform
[DCC Warning] ComCtrls.pas(6757): W1036 Variable 'Section' might not have been initialized
[DCC Warning] ComCtrls.pas(19268): W1023 Comparing signed and unsigned types - widened both operands

Обычно я стараюсь по возможности исключать предупреждения компилятора, но это "стандартные" модули Delphi. Являются ли эти предупреждения косвенным результатом чего-либо в моем коде? Если так, как я могу выяснить, что / где? Если нет, что мне с ними делать?

Ответы [ 8 ]

11 голосов
/ 16 мая 2009

Я полагаю, это потому, что у вас есть исходный код Delphi на вашем пути сборки. Если вы удалите исходные каталоги Delphi, то он должен собираться без этих предупреждений.

5 голосов
/ 16 мая 2009

Причина, по которой они отображаются только при выполнении сборки, заключается в том, что команда compile компилирует только исходный код, который изменился со времени предыдущей компиляции. Пока команда Build перекомпилирует все в проекте независимо от изменений.

Скорее всего, предупреждения вызваны тем, что исходная папка Delphi включена в путь поиска проекта. Если вы удалите его и удалите dcus в папке вашего проекта, при перекомпиляции вам потребуется указать, требуется ли исходный код Delphi для чего-либо в проекте. По моему опыту вам понадобится исходный код Delphi, если вы обнаружили ошибку в реализации Delphi и сделали специальную копию класса Delphi, чтобы исправить ошибку. Если это тот случай, когда вы пытаетесь собрать без исходного кода Delphi, вы обычно получаете:

Модуль "% s" скомпилирован с модулем "% s" в "% s", но в другой версии "% s" найдено (F2446)

Где% s будет классом низкого уровня Delphi.

Если вы не получили никакой ошибки, на самом деле не требовался источник Delphi.

Это также может произойти, если источник Delphi находится в среде пути поиска.

3 голосов
/ 06 ноября 2013

Первые два предупреждения, которые вы упомянули (наряду с несколькими другими), должны дать вам понять, что код, который вы используете в настоящее время, не будет компилироваться на разных платформах, поддерживаемых Delphi. Для Delphi 2007 не так много, но он несет в себе остатки Kylix (версия для Linux, которая ушла) и Delphi для .NET (которая также ушла).

Более поздние версии Delphi поддерживают кроссплатформенность (Win32 / Win64, OS X, iOS и Android), где эти сообщения снова актуальны при разработке приложений Firemonkey (или приложений VCL, если существуют различия между Win32 и Win64). Они указывают на точки в вашем коде, где вам придется вносить изменения в ваш код для разных операционных систем. (Например, два, которые вы цитируете, относятся к диалогам, специфичным для Windows; вам нужно использовать другой диалог, основанный на целевой платформе, и использовать операторы {$IFDEF} для областей, специфичных для платформы, чтобы предотвратить их компиляцию для других платформ.

Поскольку ваш текущий код нельзя перенести напрямую (даже в современной версии Delphi) на что-либо, кроме Windows, поскольку он основан на VCL, вы можете безопасно отключить эти предупреждения. Используйте Project->Options->Compiler Messages и снимите флажки со следующих сообщений (или используйте определение компилятора, которое я включил в ваш код):

Library Symbol                       {$WARN SYMBOL_LIBRARY OFF}
Platform Symbol                      {$WARN SYMBOL_PLATFORM OFF}
Library Unit                         {$WARN UNIT_LIBRARY OFF}
Platform Unit                        {$WARN UNIT_PLATFORM OFF}
Unsafe type  (.NET remnant)          {$WARN UNSAFETYPE OFF}
Unsafe code  (.NET remnant)          {$WARN UNSAFECODE OFF}
Unsafe typecast (.NET remnant)       {$WARN UNSAFECAST OFF}

Последние два, о которых вы упомянули, я не могу воспроизвести с помощью D2007 (IDE версия 11.0.2804.9245), поэтому я подозреваю, что ответ skamradt верный - это потому, что в вашем пути поиска есть исходные каталоги VCL и ты не должен Он должен быть установлен на $(BDS)\Lib. Если вам нужно пройтись по источнику, используйте страницу Project->Options->Compiler и отметьте опцию Use debug DCUs в разделе Debugging.

2 голосов
/ 06 ноября 2013

TFileOpenDialog будет работать только в Windows Vista и выше. Вы должны использовать TOpenDialog вместо TFileOpenDialog, в более новых версиях Delphi он будет определять, на какой ОС он работает, и отображать соответствующий диалог.
https://forums.embarcadero.com/thread.jspa?threadID=70498

2 голосов
/ 18 мая 2009

Если вы хотите продолжить явную компиляцию источника VCL в свой проект, вы можете сделать копию модулей, которые вызывают подсказки / предупреждения компилятора, и «исправить» подсказки / предупреждения в этой копии. Поместите обновленные / «исправленные» копии этих блоков VCL в другую папку и убедитесь, что вы добавили путь к этой папке в путь поиска вашего проекта ДО пути к источнику Delphi VCL.

например. Мой путь поиска проекта выглядит примерно так: "C: \ Dev \ Source \ MyFixedVCLUnits; C: \ Program Files \ CodeGear \ RAD Studio \ 6.0 \ source"

Чтобы привести пример простых исправлений, необходимых для удаления этих предупреждений, вот одна из функций в Dialogs.pas, которая теперь живет в моем Папка «C: \ Dev \ Source \ MyFixedVCLUnits»:

{$WARNINGS OFF}<br> function TFileOpenDialogWrapper.CreateFileDialog: TCustomFileDialog;<br> begin<br> Result := TFileOpenDialog.Create(nil);<br> Result.OnExecute := OnExecuteEvent;<br> end;<br> {$WARNINGS ON}

В этом случае просто добавьте {$ WARNINGS OFF} и т. Д. При необходимости.

2 голосов
/ 16 мая 2009

Я потратил целую вечность, чтобы получить эти проблемы (ну, в любом случае, ваши первые два), и по моему незнанию фактически удалил Delphi и переустановил его безрезультатно. Я наконец-то обнаружил, что это связано с отсутствием настроек проекта. По крайней мере, во-первых, если вы переносите проекты из более ранней версии Delphi, ваши существующие настройки проекта преобразуются, но без видимой причины Delphi может начать забывать об этом и предоставляет вам «пустой» набор настроек проекта. Вы можете увидеть это, открыв Project-Options, где вы найдете Base, Release и Debug. Проверьте активный (он выделен жирным шрифтом в менеджере проектов), и вы должны увидеть, что у него нет путей к каталогам, а также всех подсказок и предупреждений по умолчанию. Большинство из этих значений по умолчанию хороши, но «Символ платформы» и «Модуль платформы» должны быть отключены (по крайней мере, для Win32). С Уважением, Brian

1 голос
/ 11 января 2011

Если вы разрабатываете только для конкретной платформы, откройте исходный код проекта и добавьте

{$WARN SYMBOL_PLATFORM OFF}
0 голосов
/ 11 февраля 2019

Предупреждения компилятора могут быть отключены индивидуально (отдельно для каждого типа предупреждений) в опциях проекта в 'Delphi Compiler | Советы и предупреждения '

...