Esta sugerencia también me confundió. Entonces me di cuenta de lo que es el problema. Su código:
uses
SysUtils;
procedure TForm1.DoStuff;
begin
SysUtils.DeleteFile('foo');
end;
, literalmente, está siendo reemplazado con:
uses
SysUtils;
procedure TForm1.DoStuff;
var
Flags, LastError: Cardinal;
begin
Result := Winapi.Windows.DeleteFile(PChar(FileName));
if not Result then
begin
LastError := GetLastError;
Flags := GetFileAttributes(PChar(FileName));
if (Flags <> INVALID_FILE_ATTRIBUTES) and (faSymLink and Flags <> 0) and
(faDirectory and Flags <> 0) then
begin
Result := RemoveDirectory(PChar(FileName));
Exit;
end;
SetLastError(LastError);
end;
end;
Si te fijas, su "nueva" código depende de WinApi.Windows
unidad:
Result := Winapi.Windows.DeleteFile(PChar(FileName));
que se no se incluyó en su uses
cláusula.
Si ha introducido manualmente el código (copiado y pegado), el código simplemente no se compilará hasta que haya agregado Windows
a su uses
.
En su lugar, el compilador no hará el inline
porque:
función
Inline 'DeleteFile' no se ha ampliado debido a la unidad de 'Windows' no se especifica en la lista de "
" usos es, literalmente, siendo reemplazado por "- no EXACTAMENTE como lo mostró, porque el proceso de alineación tiene que hacer ajustes para manejar los parámetros y los valores de Resultado para una llamada de función que ya no es una llamada de función después de aplicar la inserción. Pero la respuesta es correcto: el código dentro de 'SysUtils.DeleteFile()' se está llevando a la co de llamada de, y requiere una referencia a la unidad 'Windows' para satisfacer las llamadas API o de lo contrario no se compilará la línea entrante. –