2

Free Pascal 文档声明该RawByteString类型是在 Free Pascal 中定义的,但我找不到在哪里。人们应该期望它是在System单元中定义的,就像在 Delphi 中一样,但是当我编译(使用 FPC 2.6.2,{$mode delphi})一个函数声明

class function FromAnsi(const S: RawByteString): ByteArray; static;

我得到编译器错误

Error: Identifier not found "RawByteString"

猜猜我可以自己声明类型:

type
  RawByteString = type AnsiString(CP_NONE);

但我想找到“本机”FPC 声明。


感谢您的快速解答。由于我不需要支持 FPC 1.x,我需要的解决方法是:

{$IFDEF FPC}
{$IF FPC_VERSION = 2}
  {$IF FPC_RELEASE <= 6}
    type
      RawByteString = AnsiString;
  {$IFEND}
{$IFEND}
{$ENDIF}
4

2 回答 2

5

您需要使用 FPC 2.7.1。

2.6.x 中不存在新的字符串类型

于 2014-09-10T15:07:23.380 回答
2

从您在问题中链接的文档中:

在 FPC 2.6.x 之前(包括在内),RTL 基于 Turbo Pascal 和 Delphi 7。这意味着它主要基于 shortstring、ansistring 和 pchar 类型。这些类型都没有与它们相关的任何编码信息,但隐含地假定以“默认系统编码”进行编码,并在没有任何转换的情况下传递给 OS API 调用。

在 Delphi 2009 中,Embarcadero 将整个 RTL 转换为 UnicodeString 类型,它使用 UTF-16 表示字符串。此外,他们还使 AnsiString 类型“可识别代码页”。这意味着从那时起 AnsiStrings 包含代码页,应根据该代码页解释其数据。

FPC 对这些字符串类型的语言级支持已经在编译器的当前开发版本(FPC 2.7.1/trunk)中可用。RTL 级别的支持尚未完成。本页概述了这些字符串类型的代码页相关行为、RTL 中当前的支持级别,以及未来如何改进这种支持的可能方式。

换句话说,对于新的 D2009 类似字符串类型,您至少需要 2.7。

于 2014-09-10T15:09:00.170 回答