Второй параметр FileWrite()
является нетипизированным const
. Все, что вы передаете ему, передается по ссылке, и поэтому вы должны дать ему реальную переменную для ссылки. В этом случае вы можете просто разыменовать указатель PChar
, который позволит параметру ссылаться на 1-й Char
во временном String
, который вы создаете, например:
FileWrite(lFile, PChar(IntToStr(PIN))^, flen)
Примечание, однако, FileWrite()
работает с необработанными байтами, а не со строковыми символами. Вы говорите FileWrite()
записать ровно 2 байта, что может работать или не работать должным образом, в зависимости от того, какую версию Delphi вы используете и какое значение содержит PIN
.
Попробуйте вместо этого :
procedure TForm1.WriteFN(const PIN: integer);
var
lFile: integer;
flen : integer;
s: AnsiString;
begin
s := AnsiString(IntToStr(PIN));
flen := Length(s);
lFile := FileOpen('/sys/pins', fmOpenWrite);
if lFile = -1 then
raise Exception.CreateFmt('Cannot create file to export PIN%d', [PIN]);
try
if FileWrite(lFile, PAnsiChar(s)^, flen) = -1 then
raise Exception.CreateFmt('Cannot write to file to export PIN%d', [PIN]);
finally
FileClose(lFile);
end;
end;
Если вы используете современную версию Delphi, рассмотрите возможность использования TFile.WriteAllText()
вместо:
uses
..., System.IOUtils;
procedure TForm1.WriteFN(const PIN: integer);
begin
try
TFile.WriteAllText('/sys/pins', IntToStr(PIN));
except
Exception.RaiseOuterException(
Exception.CreateFmt('Cannot export PIN%d', [PIN])
);
end;
end;