Delphi 德尔菲。文件写入,错误-需要E2036变量
我没有使用filewrite很多时间 我执行了此过程并收到下一个错误:E2036所需变量(在filewrite中的flen变量上) 如何解决这个问题Delphi 德尔菲。文件写入,错误-需要E2036变量,delphi,Delphi,我没有使用filewrite很多时间 我执行了此过程并收到下一个错误:E2036所需变量(在filewrite中的flen变量上) 如何解决这个问题 Delphi Rio,Win10.文件写入()的第二个参数是非类型的常量。传递给它的任何内容都是通过引用传递的,因此必须给它一个真正的变量来引用。在这种情况下,您可以简单地取消引用PChar指针,这将使参数引用您正在创建的临时字符串中的第一个Char,例如: FileWrite(lFile,PChar(IntToStr(PIN))^,flen)
Delphi Rio,Win10.文件写入()的第二个参数是非类型的
常量。传递给它的任何内容都是通过引用传递的,因此必须给它一个真正的变量来引用。在这种情况下,您可以简单地取消引用PChar
指针,这将使参数引用您正在创建的临时字符串中的第一个Char
,例如:
FileWrite(lFile,PChar(IntToStr(PIN))^,flen)
但是,请注意,FileWrite()
对原始字节而不是字符串进行操作。您告诉FileWrite()
只写2个字节,这可能正常工作,也可能不正常工作,具体取决于您使用的是哪个版本的Delphi,以及PIN
包含的值
请尝试以下方法:
过程TForm1.WriteFN(常量PIN:integer);
变量
lFile:整数;
flen:整数;
s:翻译;
开始
s:=AnsiString(IntToStr(PIN));
flen:=长度(s);
lFile:=FileOpen('/sys/pins',fmOpenWrite);
如果lFile=-1,则
引发异常。CreateFmt('无法创建文件以导出PIN%d',[PIN]);
尝试
如果FileWrite(lFile,PAnsiChar(s)^,flen)=-1,则
引发异常。CreateFmt('无法写入文件以导出PIN%d',[PIN]);
最后
文件关闭(lFile);
结束;
结束;
如果您使用的是Delphi的现代版本,请考虑使用:
使用
…,System.IOUtils;
过程TForm1.WriteFN(常量引脚:整数);
开始
尝试
TFile.WriteAllText('/sys/pins',IntToStr(PIN));
除了
Exception.RaiseOuterException(
异常。CreateFmt('无法导出PIN%d',[PIN])
);
结束;
结束;
文件写入()的第二个参数是非类型的常量。传递给它的任何内容都是通过引用传递的,因此必须给它一个真正的变量来引用。在这种情况下,您可以简单地取消引用PChar
指针,这将使参数引用您正在创建的临时字符串中的第一个Char
,例如:
FileWrite(lFile,PChar(IntToStr(PIN))^,flen)
但是,请注意,FileWrite()
对原始字节而不是字符串进行操作。您告诉FileWrite()
只写2个字节,这可能正常工作,也可能不正常工作,具体取决于您使用的是哪个版本的Delphi,以及PIN
包含的值
请尝试以下方法:
过程TForm1.WriteFN(常量PIN:integer);
变量
lFile:整数;
flen:整数;
s:翻译;
开始
s:=AnsiString(IntToStr(PIN));
flen:=长度(s);
lFile:=FileOpen('/sys/pins',fmOpenWrite);
如果lFile=-1,则
引发异常。CreateFmt('无法创建文件以导出PIN%d',[PIN]);
尝试
如果FileWrite(lFile,PAnsiChar(s)^,flen)=-1,则
引发异常。CreateFmt('无法写入文件以导出PIN%d',[PIN]);
最后
文件关闭(lFile);
结束;
结束;
如果您使用的是Delphi的现代版本,请考虑使用:
使用
…,System.IOUtils;
过程TForm1.WriteFN(常量引脚:整数);
开始
尝试
TFile.WriteAllText('/sys/pins',IntToStr(PIN));
除了
Exception.RaiseOuterException(
异常。CreateFmt('无法导出PIN%d',[PIN])
);
结束;
结束;
似乎不可信。该参数不需要变量,在任何情况下,该代码都提供了一个变量。看起来,即使代码正常工作,它也会写入2字节的地址,而不是任何文本。而且,你竟然在写文本,这似乎很奇怪。尤其是当值小于10时。我怀疑这里有很多问题。调试器抱怨第二个参数,即您想要获取表达式的地址。这似乎不可信。该参数不需要变量,在任何情况下,该代码都提供了一个变量。看起来,即使代码正常工作,它也会写入2字节的地址,而不是任何文本。而且,你竟然在写文本,这似乎很奇怪。尤其是当值小于10时。我怀疑这里有很多问题。调试器抱怨第二个参数,您希望获取表达式的地址。
procedure TForm1.WriteFN(const PIN: integer);
var
lFile: integer;
flen : integer;
begin
flen := 2;
lFile := FileOpen('/sys/pins', fmOpenWrite);
try
if filewrite(lFile, PChar(IntToStr(PIN)), flen) = -1 then
raise Exception.CreateFmt('Cannot export PIN%d', [PIN]);
finally
fileclose(lFile);
end;
end;