Delphi 2009/2010中的新字符串类型如何工作?

我必须将一个大型的遗留应用程序转换为Delphi 2009,它使用字符串,AnsiStrings,WideStrings和UTF8数据,我很难理解新的字符串类型是如何工作的以及它们应该如何使用。

该应用程序完全支持使用TntUnicodeControls的Unicode,并且还有第三方DLL需要特定编码中的字符串(主要是UTF8和UTF16),从而使转换任务不会像人们怀疑的那样微不足道。

我尤其遇到C DLL调用和选择正确类型的问题。 我也会得到这样的印象,即有很多隐式字符串转换发生,因为无论Delphi字符串如何编码,其中一个DLL似乎总是接收UTF-8编码的字符串。

有人可以提供一个关于新的德尔福2009年字符串类型UnicodeString和RawByteString的简短概述,也许一些使用提示和转换2009年以前的应用程序时可能的陷阱?


请在本周五观看我的CodeRage 4谈话“在您的程序中使用Unicode和其他编码”,或等到它的重播在线提供。

我将介绍一些编码并解释字符串格式。

这些幻灯片很快就会上市(我今天会试着让它们上网),并且包含大量你应该在互联网上阅读的内容(但我必须承认我忘记了eed3si9n发布的Unicode上Joel的链接)。

将今天编辑这个答案与上传和链接。


编辑:

如果你有一个可以显示你的C / C ++ DLL接收到UTF8编码的字符串的小样本,但是认为它们应该被编码,否则请发布它(邮件给我;几乎所有的东西都在.com的pluimers中,特别是如果你在at符号前使用我的名字)。

会话资料可以立即下载,包括“在您的程序中使用Unicode和其他编码”会话。

这些是该会话的链接:

阅读这些:

  • Marco Cantu,白皮书“Delphi和Unicode”
  • Marco Cantu,介绍“Delphi和Unicode”
  • Nick Hodges,白皮书“在Unicode世界中的Delphi”
  • 相关的在线帮助主题:

  • Delphi和C ++ Builder 2009中的新特性
  • 字符串类型:Base:ShortString,AnsiString,WideString,UnicodeString
  • 字符串类型:Unicode(包括字符串类型的内部内存布局)
  • 字符串类型:启用Unicode
  • 字符串类型:RawByteString(带CodePage $ ffff的AnsiString)
  • 字符串类型:UTF8String(带CodePage 65001的AnsiString)
  • 字符串< - > PChar转换:PChar基础
  • 字符串< - > PChar转换:返回PChar本地变量
  • 字符串< - > PChar转换:将本地变量作为PChar传递
  • 希望这会让你走。 如果没有,给我发邮件,我会尽量在这里给出答案。


    请参阅由MarcoCantù编写的白皮书Delphi和Unicode,我猜绝对的绝对最小每个软件开发人员都必须知道Joel编写的Unicode和字符集(无借口!)。

    一个缺点是默认的Win32 API调用已被映射为使用W(宽字符串)版本而不是A(ANSI)版本,例如ShellExecuteA如果您的代码在假设AnsiString内部布局时执行了棘手的指针代码,它将会中断。 甲回退是替代PCharPAnsiCharCharAnsiCharstringAnsiString ,和追加在Win32 API调用用于代码部分的端部。 代码实际编译并正常运行后,您可以重构代码以使用stringUnicodeString )。


    请注意,它不仅打真实的字符串代码。 它还可以访问PCHAR用于拖拽缓冲区或使用API​​进行接口的代码。

    例如动态加载DLL的头文件的初始化代码(getprocedureaddress / loadlibray)

    链接地址: http://www.djcxy.com/p/91047.html

    上一篇: How do the new string types work in Delphi 2009/2010?

    下一篇: Weird call stack when application has frozen