gpt4 book ai didi

delphi - Delphi 2009/2010 和 Windows API 调用的 Unicode 问题

转载 作者:行者123 更新时间:2023-12-03 15:26:14 24 4
gpt4 key购买 nike

嗨,我一直在 Delphi 2006 中使用这个函数,但现在在 D2010 中它会抛出错误。我认为这与转向 Unicode 有关。

  Function TWinUtils.GetTempFile(Const Extension: STRING): STRING;
Var
Buffer: ARRAY [0 .. MAX_PATH] OF char;
Begin
Repeat
GetTempPath(SizeOf(Buffer) - 1, Buffer);
GetTempFileName(Buffer, '~~', 0, Buffer);
Result := ChangeFileExt(Buffer, Extension);
Until not FileExists(Result);
End;

我应该怎么做才能让它发挥作用?

编辑

调用 ChangeFileExt 时出现“访问冲突”

最佳答案

Windows.Pas

function GetTempFileName(lpPathName, lpPrefixString: PWideChar;
uUnique: UINT; lpTempFileName: PWideChar): UINT; stdcall;

function GetTempPath(nBufferLength: DWORD; lpBuffer: PWideChar): DWORD; stdcall;

SysUtils.Pas

function ChangeFileExt(const FileName, Extension: string): string;

试试这个

  Function TWinUtils.GetTempFile(Const Extension: STRING): STRING;
Var
Buffer: ARRAY [0 .. MAX_PATH] OF WideChar;
Begin
Repeat
GetTempPath(Length(Buffer), Buffer);
GetTempFileName(Buffer, '~~', 0, Buffer);
Result := ChangeFileExt(Buffer, Extension);
Until not FileExists(Result);
End;

或者这个

  Function GetTempFile(Const Extension: String): String;
Var
Buffer: String;
Begin
SetLength(Buffer,MAX_PATH);
Repeat
GetTempPath( MAX_PATH, PChar( Buffer) );
GetTempFileName(PChar( Buffer), '~~', 0, PChar( Buffer));
Result := ChangeFileExt(Buffer, Extension);
Until not FileExists(Result);
End;

对于 Delphi,Char 和 PChar 类型分别是 WideChar 和 PWideChar 类型。

如果您使用任何将数据返回到字符缓冲区的 Windows API,则需要将这些缓冲区重新声明为字节数组或 AnsiChar 数组。

如果您正在调用这些 Windows API 并在缓冲区中发送,则在告诉 API 您的缓冲区有多长时是否使用了 sizeof 函数。这些调用需要更改为 Length 函数,因为Windows Widechar API 需要字符数,而不是字节数

再见。

关于delphi - Delphi 2009/2010 和 Windows API 调用的 Unicode 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1420803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com