现有Delphi项目迁移到Tiburon中的注意事项

随着 Embarcadero 8 月 25 号发布 RAD Studio 2009 (Tiburon) 以来(Tiburon 的 RTM 日期可能要延后到 9 - 10 月),随着 Tiburon 全面支持 Unicode,现有的 Delphi / C++ Builder 项目要迁移到 Unicode 下应该注意些什么也成为大家最为关心的问题。Tiburon 对 Unicode 的支持不仅仅是将原来 类型映射为 AnsiString 的 String 类型直接改成 WideString,而是对 AnsiString 结构作出修改,同时增加了 UnicodeString 类型来完美支持 Unicode。这意味着,要想平稳迁移到 Unicode 下,程序员不得不对现有代码作出一定的修改。

在 Tiburon 以前的版本中,AnsiString 和 WideString 除了 data size 不同外,在功能上是相同的。早先版本的 AnsiString 的结构如下:

Format of AnsiString Data Type

Reference Count Length String Data (Byte sized) Null Term
-8 -4 0 Length

而这个结构在 Tiburon 中已经发生变化,AnsiString 增加了两个新的 fields, 一个是 CodePage,一个是 ElemSize,这样做可以让新版的 AnsiString 和 UnicodeString 在结构上保持一致。

而 WideString 类型在早先的版本中用来保存双字节数据。其本质和 Windows BSTR 是一样的。在 Tiburon 中 WideString 仍然是为 COM 保持兼容的,也就是说它依然没有引用计数,相比较而言,UnicodeString 在性能和效率上将会是 COM 以外的程序首选的字符类型。

闪亮登场的 UnicodeString 类型

Tiburon 中,新的、默认的 string 就是 UnicodeString。这个类型既可以包含 ANSI 字符,也可以包含 Unicode 字符。下面是 UnicodeString 类型的结构:

Format of UnicodeString Data Type

CodePage Element Size Reference Count Length String Data (element sized) Null Term
-12 -10 -8 -4 0 Length * elementsize

UnicodeString 和 AnsiString 都是如上的结构,尽管 UnicodeString 包含是双字节数据,AnsiString 包含的是单字节的。

用 Object Pascal 语言来描述 UnicodeString 的结构,应该是这样:

type
StrRec = record
  CodePage: Word;
  ElemSize: Word;
  refCount: Integer;
  Len: Integer;
  case Integer of
   1: array[0..0] of AnsiChar;
   2: array[0..0] of WideChar;
end;

时间: 2024-12-22 06:57:26

现有Delphi项目迁移到Tiburon中的注意事项的相关文章

【译】将 Android 项目迁移到 Kotlin 语言

本文讲的是[译]将 Android 项目迁移到 Kotlin 语言, 原文地址:Migrating an Android project to Kotlin 原文作者:Ben Weiss 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:wilsonandusa 校对者:phxnirvana, Zhiw 不久前我们开源了 Topeka,一个 Android 小测试程序. 这个程序是用 integration tests 和 unit tests 进行测试

Silverlight程序启动和项目迁移问题

Kathleen Dollard是一位咨询顾问.作者.培训师和演讲者.她10年以来一 直是微软最有价值的专家.她回答了两个关于Silverlight产生的隐蔽的错误的 问题. 读者问:我正在把一个Silverlight项目从Visual Studio 2008迁移到Visual Studio 2010,在编译中找不到"可编辑的"和"显示"属性.参考了 System.Data.Annotations.dll(系统.数据.注释动态链接库),我确实正确地使 用了声明.这是

将J2EE项目迁移到IBM Lotus Expeditor V6.1

简介:使用 IBM Lotus Expeditor Toolkit 将 J2EE 项目迁移到 IBM Lotus Expeditor V6.1,然后 把迁移后的项目部署在 Lotus Expeditor 运行时上.本文讲解迁移 J2EE 项目所需的步骤以及 Lotus Expeditor 不支持的 J2EE 特性. IBM Lotus Expeditor 这种 IBM 产品支持用熟悉的编程模型将 J2EE 应用程序迁移到客户机上.IBM Lotus Expeditor Toolkit 使开发人员

通过RAP让RCP项目运行在浏览器中

从上篇文章<RAP 与 RCP的差别>中,我们知道,RCP与RAP之间的区别很小,现在我们就开始研究他 们的区别到底有多小,接下来打算将一个RCP项目迁移到RAP项目,我们从这样的一个实际的例子来演示. 我们先在Eclipse创建一个RCP插件工程,选择RCP应用的Mail模板.我们就将这个RCP版本的Mail Demo 变成 RAP版本的Mail Demo,比如我们的插件工程的名称就叫做"com.vwpolo.rcp.mail", 创建完RCP插件项目后,我们双击打开pl

OA项目迁移到CentOS

手头有一个OA项目以前公司的,跑在windows环境下.一直想把它迁移到Linux系统下. 最近花了一段时间,终于把它迁移到Centos下.下面把相关的操作步骤记录如下. 此OA项目使用的JDK+Tomcat+Oracle方式构建.要迁移项目之前,我们需要进行几步操作: 1.Oracle数据库安装 有关Oracle数据库的安装与配置,可以参考<烂泥:centos6.5安装oracle10g数据库(一)>.<烂泥:centos6.5安装oracle10g数据库(二)> Oracle数

eclipse到Android Studio的项目迁移

eclipse到Android Studio的项目迁移 标签: android项目迁移android studioeclipse 2015-08-21 14:18 629人阅读 评论(0) 收藏 举报 分类: Android(31) 工具(14) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一直以来,公司开发都是用eclipse,但是随着我们应用不断成长,项目结构越来越庞大,项目间依赖关系变得很复杂,用eclipse管理显得非常吃力,经常一个同事更改依赖项目之后,别人

clipse项目迁移到android studio的方法(图文最新版)_Android

前言 最近Android studio(下文简称AS)官方发布了正式版,目前火得不行.个人认为主要是因为android是google自家的产品,AS也是他自己搞的IDE,以后的趋势android开发肯定会用AS,至于eclipse的adt插件是否继续更新就不可而知了.最近我也在android官网找了一下集成好的adt-bundle,但没有找到,可能是路径变了(搜索也没有找到)或者是真的为了支持AS就下架了.Github上现在也是一大堆的AS项目,所以这是个趋势啊. 之所以写本文是因为网上找的ec

eclipse-MyEclipse项目导入到Eclipse中如何访问

问题描述 MyEclipse项目导入到Eclipse中如何访问 本人正在学习Extjs,所以在网上下载了一个项目供学习.这个项目是在MyEclipse下建立的,我也按照网上的方法将项目导入到Eclipse之中,修改成web项目等一些操作.该项目在MyEclipse下能访问,但是导入到Eclipse之中就不能访问,我想请问一下是不是我的访问路径错了? 解决方案 我找到原因了.我没有把项目加载到tomcat下. 解决方案二: 在MyEclipse下,http://localhost:8080/ext

eclipse-安卓在Eclipse中运行项目,为什么虚拟机中不会直接运行项目?

问题描述 安卓在Eclipse中运行项目,为什么虚拟机中不会直接运行项目? 解决方案 贴出debug再百度一下就知道了 解决方案二: Eclipse不可不知的用法之四:配置服务器与项目的新建运行