maxiu1989 napisał(a)
Jesli bym chciał do istniejacej procedury dodac zeby cos zwracała muszę zmienic na funkcję? Czy procedura z wynikiem tez jest akceptowalna przez kompilator?
Jeżeli masz dostęp do jej kodu to nie musisz koniecznie zmieniać ją w funkcję. Ponieważ tak, jak wspomniałem możesz uzyskać zwracanie wyniku przez jeden z parametrów. Warunek jest taki, żeby poprzedzić go słowem kluczowym var, co wymusi podawanie jako parametru zmiennej. Czyli na przykład zmiast stringu 'bleble' będziesz musiał podać zmienną. Najlepiej pokaże to Ci może jakiś przykład. Ponieważ ostatnio piszę tylko w WinAPI pokaże dwie funkcje:
Kopiuj
function ReadTextFromFile(AFileName : string; var OutStr : string) : boolean;
var
BytesRead : DWORD;
SrcFile : THandle;
SrcFileSize : Int64;
begin
OutStr := '';
SrcFile := CreateFile(PChar(AFileName), GENERIC_READ,
FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := SrcFile <> INVALID_HANDLE_VALUE;
if Result then
begin
SrcFileSize := GetFileSize(SrcFile, nil);
SetLength(OutStr, SrcFileSize);
ReadFile(SrcFile, OutStr[1], SrcFileSize, BytesRead, nil);
CloseHandle(SrcFile);
end;
end;
function SaveTextToFile(AFileName : string; InStr : string) : boolean;
var
OutFile : THandle;
BytesWritten : DWORD;
OutFileSize : integer;
begin
OutFile := CreateFile(PChar(AFileName), GENERIC_WRITE,
FILE_SHARE_READ, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
Result := OutFile <> INVALID_HANDLE_VALUE;
if Result then
begin
OutFileSize := Length(InStr);
WriteFile(OutFile, InStr[1], OutFileSize, BytesWritten, nil);
CloseHandle(OutFile);
end;
end;
Funkcje zwracają True jeżeli odczyt/zapis z/do pliku się powiodą (czyli jeżeli plik istnieje i przy odczycie lub zapis do pliku jest możłiwy). Dodatkowo jeżeli funkcja ReadTextFromFile się powiedzie to w parametrze OutStr uzyskamy zawartość wczytanego pliku.