2012-06-21 15 views
5

tengo que mover un archivo en la carpeta system32, que utiliza este código:¿Por qué obtengo "E2026 expresión constante esperada"?

//-----------FUNCTION---------------- 
function GetWindowsSystemDir(): String; 
var 
    vlBuff: Array[0..MAX_PATH-1] of Char; 
begin 
    getSystemDirectory(vlBuff, MAX_PATH); 
    Result := vlBuff; 
end; 
//----------------------------------- 

const 
    SMyFile = GetWindowsSystemDir+'\intructions.txt'; //error here, line 87 
var 
    S: TStringList; 
begin 
    S := TStringList.Create; 
    try 
    S.Add('intructions'); 
    S.SaveToFile(SMyFile); 
    finally 
    S.Free; 
    end; 
end; 

me da error al compilar:

[DCC Error] Unit1.pas(87): E2026 Constant expression expected 

Gracias.

Respuesta

14

Como indica el mensaje de error del compilador, espera una expresión constante en la que está inicializando la const. Pero está llamando a una función allí, y el compilador no la evaluará en tiempo de compilación.

declara una variable lugar, y asignarle el interior del bloque begin-end regular de su código:

var 
    SMyFile: string; 
    S: TStringList; 
begin 
    S := TStringList.Create; 
    try 
    S.Add('intructions'); 
    SMyFile := GetWindowsSystemDir+'\intructions.txt'; 
    S.SaveToFile(SMyFile); 
    finally 
    S.Free; 
    end; 
end; 
+0

Gracias, respuesta perfecta! –

+0

@GiacomoKingPatermo: debe "aceptar" la respuesta si resuelve su problema. – LightBulb

+3

@LightBulb, hay un tiempo de retraso entre cuando publica una pregunta y cuando puede aceptar una respuesta. Como Rob publicó su respuesta solo 2 minutos después de la publicación de la pregunta, no había transcurrido el tiempo suficiente. Por favor, no se moleste en aceptar cuando ni siquiera es posible que el póster lo haga. :-) Consulte [Preguntas frecuentes] (http://stackoverflow.com/faq) para obtener una explicación de cómo funciona la aceptación. –

Cuestiones relacionadas