从C+;升级复杂应用程序需要知道什么+;从2007年到2010年? 我公司的主要应用程序主要是用C++编写的(带有一些Delphi代码和组件)。我们正在从RAD Studio 2007升级到2010,下一个版本将在大约一周后开始。我需要知道什么才能确保升级顺利进行

从C+;升级复杂应用程序需要知道什么+;从2007年到2010年? 我公司的主要应用程序主要是用C++编写的(带有一些Delphi代码和组件)。我们正在从RAD Studio 2007升级到2010,下一个版本将在大约一周后开始。我需要知道什么才能确保升级顺利进行,delphi,unicode,c++builder,c++builder-2010,Delphi,Unicode,C++builder,C++builder 2010,到目前为止,我想到的几点是: Unicode。这个看起来很复杂。我们的应用程序包含std::string-s和AnsiString-s的可怕组合,它们之间有转换。关于这个问题,我有很多问题,比如“WString是否能够保持所有的UnoDeString都可以,我们应该做一个搜索/替换”,或者“我们应该避免所有的C++字符串类型,并使用UnoDeString”,“尽管现有的.HPPs事件处理程序方法原型已被编译器翻译为AnsiString,但我们是否可以将所有事件处理程序更改为使用字符串?”这是一

到目前为止,我想到的几点是:

  • Unicode。这个看起来很复杂。我们的应用程序包含std::string-s和AnsiString-s的可怕组合,它们之间有转换。关于这个问题,我有很多问题,比如“WString是否能够保持所有的UnoDeString都可以,我们应该做一个搜索/替换”,或者“我们应该避免所有的C++字符串类型,并使用UnoDeString”,“尽管现有的.HPPs事件处理程序方法原型已被编译器翻译为AnsiString,但我们是否可以将所有事件处理程序更改为使用字符串?”这是一个非常基本的问题,例如“我们是否应该在所有字符串前加上L前缀,或者编译器是否足够聪明,是否启用了Unicode以使用Unicode字符串?”“,等等。对此有任何见解都将不胜感激

    我们还需要向后兼容。我们的应用程序使用自己的二进制元组格式,当前将字符串存储为字节数组。我需要升级它来读取旧文件,并可能编写新的Unicode字符串。如何处理嵌入二进制格式的Unicode字符串?有没有一种通用的方法可以让我将Unicode析构函数指向一个字节数组,这个字节数组最初可能被写成ANSI字节或Unicode,然后它就会知道它们是什么

  • 第三方组件。我们主要使用,而且似乎是兼容的

  • 项目升级。Codegear论坛中的标准建议似乎是在升级时手动重新创建所有项目文件。这是一个非常多的工作(在我们的主应用程序中有7个项目(大部分是libs),加上6个dll和很多文件。)有没有办法实现自动化

  • 链接器看起来怎么样?传统上,链接器随机崩溃或资源耗尽会给我们带来很多麻烦,尽管2007年它变得更好了。这就是我们的主应用程序被拆分为几个lib的原因之一——链接器不能(希望是“不能,但现在可以”?)以其他方式处理它

  • 我知道有一个新的类型库编辑器和格式(它存储IDL、ie文本,并动态生成TLB?)这对使用TLB升级现有COM项目有多好?我们在C++应用程序中内置了Delphi代码和TLB。
  • 还有什么我应该考虑或知道的吗

我发现:

  • 。我不确定我是否相信这个答案,因为我以前在同一台机器上遇到过2006年和2007年的问题
  • 关于Unicode有几个答案:但没有一个是关于关注点的答案,也没有一个是关于C++Builder特定部分的答案
  • 但是,尽管这些答案很有帮助,但它们并没有回答上述所有与Unicode相关的问题
  • [编辑:添加]和的Codegear文档

升级的成本是否与好处一致

为什么不开始逐步升级,在新平台上开发新组件呢。通过不同的互操作帮助程序将新组件集成到旧版本


.

您没有说明二进制元组格式的数据字符串的用途:它们是否需要存储Unicode?当我从D2007转换到D2009时,我只能保留系统ANSI字符串的某些部分

如果需要存储Unicode,则需要检查现有数据是否与UTF-8等格式兼容。如果存储在现有数据文件中的值范围存在问题,那么我将让您的下一次升级对任何旧数据文件进行一次性转换,读取旧的数据并将其作为UTF-8写回不同的文件名或扩展名,或者修改相应的文件头数据。我已经对数据文件进行了很长时间的版本控制,只是为了允许这种处理更改

我只是刚刚开始一个BCB2010项目,所以不能对您的其他问题发表评论,但我确实很难将一个Delphi项目从D2007升级到D2009——尽管我能够通过编辑项目文件来解决这个问题,它只是XML

祝你转换顺利;-)

项目升级。Codegear论坛中的标准建议似乎是在升级时手动重新创建所有项目文件。这是一个非常多的工作(在我们的主应用程序中有7个项目(大部分是libs),加上6个dll和很多文件。)有没有办法实现自动化

有:只需使用IDE的项目导入器:)
说真的,我会尝试导入这些项目,然后再去调查它是否有效

链接器看起来怎么样?传统上,链接器随机崩溃或资源耗尽会给我们带来很多麻烦,尽管2007年它变得更好了。这就是我们的主应用程序被拆分为几个lib的原因之一——链接器不能(希望是“不能,但现在可以”?)以其他方式处理它

自从C++Builder 2009以来,我几乎再也没有遇到过ILINK的问题。我偶尔会读到其他人出现内存不足错误,但新闻组中有人发现了一个解决方法:

此外,正如您所看到的,编译器获得了一个新选项(-Cx)来控制它分配的最大内存量

我知道有一个新的类型库编辑器和格式(它存储IDL、ie文本,并动态生成TLB?)这对使用TLB升级现有COM项目有多好

应该可以顺利地工作

关于这一点,我有很多问题,比如“wstring是否能够容纳一个Unicoding可以容纳的所有东西,我们是否应该进行搜索/替换?”

是的,在Windows平台上,wchar\u t通常为16位大,这意味着它足以容纳UTF-16 w
AnsiString as = L"foo";
UnicodeString us = "bar";