Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 德尔菲。文件写入,错误-需要E2036变量_Delphi - Fatal编程技术网

Delphi 德尔菲。文件写入,错误-需要E2036变量

Delphi 德尔菲。文件写入,错误-需要E2036变量,delphi,Delphi,我没有使用filewrite很多时间 我执行了此过程并收到下一个错误:E2036所需变量(在filewrite中的flen变量上) 如何解决这个问题 Delphi Rio,Win10.文件写入()的第二个参数是非类型的常量。传递给它的任何内容都是通过引用传递的,因此必须给它一个真正的变量来引用。在这种情况下,您可以简单地取消引用PChar指针,这将使参数引用您正在创建的临时字符串中的第一个Char,例如: FileWrite(lFile,PChar(IntToStr(PIN))^,flen)

我没有使用filewrite很多时间

我执行了此过程并收到下一个错误:E2036所需变量(在filewrite中的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;