为什么此代码在结果上获得访问错误:= D2010中的缓冲行,但不是D7?
我猜,有些东西涉及UniCode,但编译器不会产生任何警告.
有关优雅解决方案的任何建议吗?
编辑:哎呀:GetTempPath调用正在摧毁堆栈,因为GetTempPath行之后Extension是空的,但之前没有... Yikes.
function GetTempPathAndFileName( const Extension: string): string;
var
Buffer: array[0..MAX_PATH] of Char;
begin
repeat
GetTempPath(SizeOf(Buffer) - 1, Buffer);
GetTempFileName(Buffer, '~', 0, Buffer);
Result := Buffer; // <--- crashes on this line,
Result := ChangeFileExt(Result, Extension);
until not FileExists(Result);
end; { GetTempPathAndFileName }
Run Code Online (Sandbox Code Playgroud)
Mas*_*ler 14
GetTempPath期望缓冲区中第一个参数的字符数,而不是字节大小.更改SizeOf
到Length
,它会工作.
要使它像D7一样工作,将"string"替换为"AnsiString",将"Char"替换为"AnsiChar".此外,调用GetTempPathA和GetTempFileNameA而不是GetTempPath和GetTempFileName.
但是Mason给出的方法可能更好,因为它将支持Unicode文件名.
归档时间: |
|
查看次数: |
447 次 |
最近记录: |