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和其他编码”会话。
这些是该会话的链接:
阅读这些:
相关的在线帮助主题:
希望这会让你走。 如果没有,给我发邮件,我会尽量在这里给出答案。
请参阅由MarcoCantù编写的白皮书Delphi和Unicode,我猜绝对的绝对最小每个软件开发人员都必须知道Joel编写的Unicode和字符集(无借口!)。
一个缺点是默认的Win32 API调用已被映射为使用W(宽字符串)版本而不是A(ANSI)版本,例如ShellExecuteA
如果您的代码在假设AnsiString
内部布局时执行了棘手的指针代码,它将会中断。 甲回退是替代PChar
与PAnsiChar
, Char
与AnsiChar
, string
与AnsiString
,和追加在Win32 API调用用于代码部分的端部。 代码实际编译并正常运行后,您可以重构代码以使用string
( UnicodeString
)。
请注意,它不仅打真实的字符串代码。 它还可以访问PCHAR用于拖拽缓冲区或使用API进行接口的代码。
例如动态加载DLL的头文件的初始化代码(getprocedureaddress / loadlibray)
链接地址: http://www.djcxy.com/p/91047.html