2

Free Pascal のドキュメントには、RawByteString型が Free Pascal で定義されていると記載されていますが、どこにあるのかわかりません。Delphi のようにユニットで定義されていることを期待する必要がありSystemますが、(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 全体を、UTF-16 を使用して文字列を表す UnicodeString 型に切り替えました。さらに、AnsiString 型を「コード ページ対応」にしました。これは、それ以降の AnsiString には、データを解釈するコード ページが含まれていることを意味します。

これらの文字列型に対する FPC の言語レベルのサポートは、現在の開発バージョンのコンパイラ (FPC 2.7.1/trunk) で既に利用可能です。RTL レベルのサポートはまだ完全ではありません。このページでは、これらの文字列型のコード ページ関連の動作の概要、RTL での現在のサポート レベル、およびこのサポートを改善する可能性のある将来の方法について説明します。

つまり、新しい D2009 類似の文字列型には少なくとも 2.7 が必要です。

于 2014-09-10T15:09:00.170 に答える