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:
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.