Delphi unicode移植:不兼容的类型:CharToOEM等Win32函数出现’Char’和’AnsiChar’错误?

Delphi unicode移植:不兼容的类型:CharToOEM等Win32函数出现’Char’和’AnsiChar’错误?,第1张

概述我正在尝试将一些旧的Delphi 7代码转换为Delphi 2010 function AnsiToDOS(S: String): String;begin SetLength(Result, Length(S)); if S <> '' then begin CharToOEM(PChar(S), PChar(Result)); end;end; 我得到了“不兼容的类型 我正在尝试将一些旧的Delphi 7代码转换为Delphi 2010

function AnsiTodoS(S: String): String;begin  SetLength(Result,Length(S));  if S <> '' then begin     CharToOEM(PChar(S),PChar(Result));  end;end;

我得到了“不兼容的类型:’Char’和’AnsiChar’”错误

找到CharToOEM(外部User32功能)

windows.pas单位

我可以以某种方式重写这个AnsiTodos函数,还是需要编写自己的CharToOEM例程?

解决方法 在Unicode Delphi中,CharToOem映射到具有以下签名的Unicode版本CharToOemW:

function CharToOem(Source: PWIDeChar; Dest: PAnsiChar): BOol; stdcall;

因此,您需要提供ANSI输出缓冲区,但您的代码提供了Unicode输出缓冲区.

自然转换是切换到AnsiString返回值.同时将函数重命名为StringToOem以更好地反映它的作用.

function StringToOem(const S: String): AnsiString;begin  SetLength(Result,Length(S));  if S <> '' then begin    CharToOem(PChar(S),PAnsiChar(Result));  end;end;

另一种方法是在适当的位置转换为OEM,但为此您需要传入ANSI字符串并显式调用API调用的ANSI版本.

function AnsiStringToOem(const S: AnsiString): AnsiString;begin  Result := S;  UniqueString(Result);  if S <> '' then begin    CharToOemA(PAnsiChar(Result),PAnsiChar(Result));  end;end;

我必须发表评论,我很惊讶地看到OEM字符集在现代仍在积极使用.我以为它已经走了恐龙之路!

总结

以上是内存溢出为你收集整理的Delphi unicode移植:不兼容的类型:CharToOEM等Win32函数出现’Char’和’AnsiChar’错误?全部内容,希望文章能够帮你解决Delphi unicode移植:不兼容的类型:CharToOEM等Win32函数出现’Char’和’AnsiChar’错误?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1273473.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存