
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’错误?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)