2014-09-10 68 views
2

Free Pascal docs狀態RawByteString類型是在Free Pascal中定義的,但我無法找到位置。不要指望它在System單元中定義的,像德爾福,但是當我編譯(使用FPC 2.6.2,{$模式德爾福})函數聲明FreeByteString類型在Free Pascal

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} 

回答

5

您需要使用FPC 2.7.1。

新的字符串類型不2.6.x的

+1

我不知道'RawByteString',但'UnicodeString'已經在FPC中可用了,因爲至少2.4.0,FPC有'unicodestrings'和'delphiunicode'模式,並且'FPC_UNICODESTRINGS'定義了要控制/檢測'string'是否映射到'AnsiString'或'UnicodeString'。 – 2014-09-10 16:36:36

+0

@RemyLebeau:對於「新字符串類型」,我指的是帶有動態編碼的字符串,與帶有靜態編碼的「UnicodeString/WideString/AnsiString」...(儘管有人可能已經認爲「AnsiString」是一種新的字符串類型,到'shortstring') – BeniBela 2014-09-10 19:27:28

2

存在從您的問題聯繫起來documentation

直至幷包括FPC的2.6.x中,RTL是基於Turbo Pascal和Delphi 7.這意味着它主要基於 shortstring,ansistring和pchar類型。這些類型都沒有任何 編碼信息與它們相關聯,但隱含地假定 在「默認系統編碼」中被編碼並被傳遞到 OS API調用而沒有任何轉換。

在Delphi 2009中,Embarcadero將整個RTL切換到代表使用UTF-16的字符串的Unicode字符串類型 。 此外,他們還使AnsiString類型的「代碼頁感知」。 這意味着AnsiStrings從此開始包含代碼頁 ,根據它們的數據應該被解釋。

FPC對這些字符串類型的語言級支持已經在編譯器的當前開發版本(FPC 2.7.1/trunk)中可用的 。 RTL級別的支持尚未完成。本頁概述了這些字符串 類型的代碼頁相關行爲,RTL中當前的支持級別以及可能的未來 如何改進此支持的方式。

換句話說,對於新的D2009相似的字符串類型,您至少需要2.7。

相關問題