Delphi 2009/2010和Windows API调用的Unicode问题
发布时间:2020-12-15 09:23:49 所属栏目:大数据 来源:网络整理
导读:嗨,我一直在Delphi 2006中使用此功能,但现在使用D2010它会抛出错误. 我认为这与切换到Unicode有关. Function TWinUtils.GetTempFile(Const Extension: STRING): STRING; Var Buffer: ARRAY [0 .. MAX_PATH] OF char; Begin Repeat GetTempPath(SizeOf(Buffer
嗨,我一直在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,'~~',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),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),PChar( Buffer)); Result := ChangeFileExt(Buffer,Extension); Until not FileExists(Result); End; 对于Delphi,Char和PChar类型分别是WideChar和PWideChar类型. 如果您使用任何将数据返回到char缓冲区的Windows API,则需要将这些缓冲区重新声明为字节数组或AnsiChar数组. 如果您正在调用这些Windows API并发送缓冲区,那么在告诉API缓冲区有多长时间时一直使用sizeof函数.这些调用需要更改为Length函数,因为Windows widechar API需要字符数,而不是字节数. 再见. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |