2009-05-15 18 views
5

En Delphi 2007, trabajando en un proyecto que incluye un componente personalizado, obtengo este conjunto de advertencias como las primeras cuatro en mensajes cuando hago una compilación completa (pero no cuando hacer una compilación recta):advertencias del compilador Delphi apuntando a unidades propias de Delphi

[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 

por lo general tratan de eliminar las advertencias del compilador en lo que pueda, pero éstas son unidades de "stock" de Delphi. ¿Son estas advertencias el resultado indirecto de algo en mi código? Si es así, ¿cómo averiguo qué/dónde? Si no, ¿qué debo hacer con ellos?

Respuesta

11

Creo que es porque tiene la fuente stock de Delphi en su ruta de compilación. Si elimina los directorios de origen Delphi, entonces debería compilar sin estas advertencias.

+0

Tengo este problema en XE5, pero no estoy seguro de qué camino eliminar, ¿puedes decir qué ruta exactamente? – Wel

2

Pasé mucho tiempo teniendo estos problemas (bueno, tus dos primeros de todos modos) y en mi ignorancia realmente desinstalé Delphi y lo reinstalé en vano. Finalmente encontré que es causado por la falta de configuración del proyecto. Al menos al principio, si migras un proyecto de un Delphi anterior, la configuración de tu proyecto existente se convierte, pero sin ninguna razón aparente, Delphi puede comenzar a olvidarse de esto y te da un conjunto "en blanco" de configuraciones de proyecto. Puede ver esto abriendo Project-Options donde encontrará Base, Release y Debug. Eche un vistazo al activo (está en negrita en el administrador del proyecto) y verá que no tiene rutas de directorio, así como tampoco todas las sugerencias y advertencias en sus valores predeterminados. La mayoría de estos valores predeterminados son correctos, pero 'Platform Symbol' y 'Platform unit' deberían estar deshabilitados (al menos para Win32). Saludos, Brian

5

La razón por la que aparecen solo cuando se hace una compilación es que el comando de compilación solo compila la fuente que ha cambiado desde la compilación anterior. Mientras que el comando Build recompila todo en el proyecto, independientemente de los cambios.

Las advertencias son causadas por la carpeta de origen Delphi que se incluye en la ruta de búsqueda del proyecto. Quitarlo y eliminar el dcus en la carpeta de su proyecto le dirá si algo en el proyecto requirió la fuente Delphi cuando recompila. En mi experiencia, deberías necesitar la fuente Delphi si has encontrado un error en la implementación de Delphi y has hecho una copia personalizada de una clase Delphi para corregir el error. Si este es el caso cuando se intenta construir sin la fuente de Delphi por lo general se obtiene:

Unidad '% s' se compila con la unidad '% s' en '% s', pero otra versión '% s ' encontrado (F2446)

Donde% s habrá alguna clase de Delphi de bajo nivel.

Si no obtiene ningún error, realmente no necesita la fuente Delphi.

Esto también puede suceder si la fuente Delphi se encuentra en la ruta de búsqueda del entorno .

2

Si desea continuar compilando explícitamente la fuente de VCL en su proyecto, puede hacer una copia de las unidades que están levantando las advertencias/advertencias del compilador y "corregir" las sugerencias/advertencias en esa copia. Coloque las copias actualizadas/"fijas" de esas unidades VCL en otra carpeta y asegúrese de agregar la ruta a esa carpeta en la ruta de búsqueda de su proyecto ANTES de la ruta a la fuente Delphi VCL.

E.g. la ruta de búsqueda de mi proyecto se ve así: "C: \ Dev \ Source \ MyFixedVCLUnits; C: \ Program Files \ CodeGear \ RAD Studio \ 6.0 \ source "

Para dar un ejemplo de las soluciones simples necesarias para eliminar estas advertencias, esta es una de las funciones en Dialogs.pas que ahora vive en mi carpeta " C: \ Dev \ Source \ MyFixedVCLUnits " :

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

En este caso, basta con añadir los $ {OFF} ADVERTENCIAS etc según sea necesario

1

Si desarrolla solamente para la plataforma específica de la fuente proyecto abierto y añadir

.
2

TFileOpenDialog funcionará solo en Windows Vista y versiones posteriores. Debe usar TOpenDialog en lugar de TFileOpenDialog, en las versiones más nuevas de Delphi detectará qué sistema operativo se está ejecutando y mostrará el cuadro de diálogo adecuado.
https://forums.embarcadero.com/thread.jspa?threadID=70498

3

Las dos primeras advertencias que mencionas (junto con algunos otros) son para hacerle consciente de que el código que está utilizando actualmente no se compilará a través de diferentes plataformas de Delphi soporta. Para Delphi 2007, no hay mucho, pero lleva los remanentes de Kylix (la versión de Linux que se ha ido) y Delphi para .NET (que también se ha ido).

Versiones más recientes de Delphi admiten plataforma multiplataforma (Win32/Win64, OS X, iOS y Android), donde estos mensajes son relevantes nuevamente al desarrollar aplicaciones Firemonkey (o aplicaciones VCL si hay diferencias entre Win32 y Win64) . Indican los puntos en su código donde tendrá que hacer ajustes en su código para diferentes sistemas operativos. (Por ejemplo, los dos que cita son para diálogos específicos de Windows, necesitaría usar un diálogo diferente basado en la plataforma de destino, y usar declaraciones {$IFDEF} alrededor de las áreas que son específicas de la plataforma para evitar que se compilen en otras plataformas.

Como su código actual no puede ser portado directamente (incluso en una versión moderna de Delphi) a otra cosa que no sea Windows porque está basado en VCL, puede apagar esas advertencias de manera segura. Use Project->Options->Compiler Messages, y desmarque los siguientes mensajes (o utilizar el compilador defino he incluido en el código):

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} 

el último que has mencionado no puedo reproducir con D2007 (versión de dos IDE 11 .0.2804.9245), entonces sospecho que la respuesta de skamradt es correcta, es porque tienes los directorios de origen de VCL en tu ruta de búsqueda, y no deberías. Debe establecerse en $(BDS)\Lib. Si necesita poder recorrer el origen, use la página Project->Options->Compiler y marque la opción Use debug DCUs bajo Debugging.

Cuestiones relacionadas