UnicodeString Fix

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1482 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2011-02-02 15:34:13 +00:00
parent 1ba130c8c4
commit 2e55ad976d
5 changed files with 111 additions and 59 deletions

View File

@ -1320,9 +1320,15 @@ var
locBuffer : PDataBuffer; locBuffer : PDataBuffer;
begin begin
Result := GetDataBuffer(AName,locBuffer); Result := GetDataBuffer(AName,locBuffer);
if Result then if Result then begin
case locBuffer^.DataType of
dtUnicodeString : AData := locBuffer^.UnicodeStrData^.Data;
dtWideString : AData := locBuffer^.WideStrData^.Data;
else
AData := locBuffer^.AnsiStrData^.Data; AData := locBuffer^.AnsiStrData^.Data;
end; end;
end;
end;
function TBaseBinaryFormatter.GetWideStr( function TBaseBinaryFormatter.GetWideStr(
const ATypeInfo: PTypeInfo; const ATypeInfo: PTypeInfo;
@ -1333,9 +1339,15 @@ var
locBuffer : PDataBuffer; locBuffer : PDataBuffer;
begin begin
Result := GetDataBuffer(AName,locBuffer); Result := GetDataBuffer(AName,locBuffer);
if Result then if Result then begin
case locBuffer^.DataType of
dtAnsiString : AData := locBuffer^.AnsiStrData^.Data;
dtUnicodeString : AData := locBuffer^.UnicodeStrData^.Data;
else
AData := locBuffer^.WideStrData^.Data; AData := locBuffer^.WideStrData^.Data;
end; end;
end;
end;
{ $IFDEF WST_UNICODESTRING} { $IFDEF WST_UNICODESTRING}
function TBaseBinaryFormatter.GetUnicodeStr( function TBaseBinaryFormatter.GetUnicodeStr(
@ -1347,9 +1359,15 @@ var
locBuffer : PDataBuffer; locBuffer : PDataBuffer;
begin begin
Result := GetDataBuffer(AName,locBuffer); Result := GetDataBuffer(AName,locBuffer);
if Result then if Result then begin
case locBuffer^.DataType of
dtAnsiString : AData := locBuffer^.AnsiStrData^.Data;
dtWideString : AData := locBuffer^.WideStrData^.Data;
else
AData := locBuffer^.UnicodeStrData^.Data; AData := locBuffer^.UnicodeStrData^.Data;
end; end;
end;
end;
{ $ENDIF WST_UNICODESTRING} { $ENDIF WST_UNICODESTRING}
function TBaseBinaryFormatter.GetObj( function TBaseBinaryFormatter.GetObj(
@ -1530,7 +1548,7 @@ begin
end; end;
tkLString{$IFDEF FPC},tkAString{$ENDIF} : tkLString{$IFDEF FPC},tkAString{$ENDIF} :
Begin Begin
ansiStrData := String(AData); ansiStrData := AnsiString(AData);
PutAnsiStr(AName,ATypeInfo,ansiStrData); PutAnsiStr(AName,ATypeInfo,ansiStrData);
End; End;
tkWString : tkWString :
@ -1659,7 +1677,7 @@ begin
end; end;
tkLString{$IFDEF FPC},tkAString{$ENDIF} : tkLString{$IFDEF FPC},tkAString{$ENDIF} :
begin begin
strData := string(AData); strData := AnsiString(AData);
StackTop().CreateInnerBuffer(dtAnsiString)^.AnsiStrData^.Data := strData; StackTop().CreateInnerBuffer(dtAnsiString)^.AnsiStrData^.Data := strData;
end; end;
tkWString : tkWString :
@ -1838,7 +1856,7 @@ begin
strData := ''; strData := '';
Result := GetAnsiStr(ATypeInfo,AName,strData); Result := GetAnsiStr(ATypeInfo,AName,strData);
if Result then if Result then
String(AData) := strData; AnsiString(AData) := strData;
End; End;
tkWString : tkWString :
begin begin
@ -1973,10 +1991,34 @@ begin
tkLString tkLString
{$IFDEF FPC}, {$IFDEF FPC},
tkAString tkAString
{$ENDIF} : string(AData) := dataBuffer^.AnsiStrData^.Data; {$ENDIF} :
tkWString : WideString(AData) := dataBuffer^.WideStrData^.Data; begin
case dataBuffer^.DataType of
dtUnicodeString : AnsiString(AData) := dataBuffer^.UnicodeStrData^.Data;
dtWideString : AnsiString(AData) := dataBuffer^.WideStrData^.Data;
else
AnsiString(AData) := dataBuffer^.AnsiStrData^.Data;
end;
end;
tkWString :
begin
case dataBuffer^.DataType of
dtUnicodeString : WideString(AData) := dataBuffer^.UnicodeStrData^.Data;
dtAnsiString : WideString(AData) := dataBuffer^.AnsiStrData^.Data;
else
WideString(AData) := dataBuffer^.WideStrData^.Data;
end;
end;
{$IFDEF WST_UNICODESTRING} {$IFDEF WST_UNICODESTRING}
tkUString : UnicodeString(AData) := dataBuffer^.UnicodeStrData^.Data; tkUString :
begin
case dataBuffer^.DataType of
dtAnsiString : UnicodeString(AData) := dataBuffer^.AnsiStrData^.Data;
dtWideString : UnicodeString(AData) := dataBuffer^.WideStrData^.Data;
else
UnicodeString(AData) := dataBuffer^.UnicodeStrData^.Data;
end;
end;
{$ENDIF WST_UNICODESTRING} {$ENDIF WST_UNICODESTRING}
tkClass, tkRecord : raise EBinaryFormatterException.Create(SERR_InnerScopeMustBeSimpleType); tkClass, tkRecord : raise EBinaryFormatterException.Create(SERR_InnerScopeMustBeSimpleType);

View File

@ -5206,7 +5206,13 @@ begin
ok := ( GetInt64Prop(Self,p^.Name) = GetInt64Prop(ACompareTo,p^.Name) ); ok := ( GetInt64Prop(Self,p^.Name) = GetInt64Prop(ACompareTo,p^.Name) );
{$IFDEF HAS_TKBOOL}tkBool,{$ENDIF} tkEnumeration, tkInteger : {$IFDEF HAS_TKBOOL}tkBool,{$ENDIF} tkEnumeration, tkInteger :
ok := ( GetOrdProp(Self,p^.Name) = GetOrdProp(ACompareTo,p^.Name) ); ok := ( GetOrdProp(Self,p^.Name) = GetOrdProp(ACompareTo,p^.Name) );
tkLString{$IFDEF FPC}, tkAString{$ENDIF} : {$IFDEF FPC}
tkAString,
{$ENDIF FPC}
{$IFDEF WST_UNICODESTRING}
tkUString,
{$ENDIF WST_UNICODESTRING}
tkLString :
ok := ( GetStrProp(Self,p^.Name) = GetStrProp(ACompareTo,p^.Name) ); ok := ( GetStrProp(Self,p^.Name) = GetStrProp(ACompareTo,p^.Name) );
tkClass : tkClass :
begin begin

View File

@ -1820,7 +1820,7 @@ begin
{$ENDIF HAS_QWORD} {$ENDIF HAS_QWORD}
tkLString{$IFDEF FPC},tkAString{$ENDIF} : tkLString{$IFDEF FPC},tkAString{$ENDIF} :
Begin Begin
strData := String(AData); strData := AnsiString(AData);
PutStr(ANameSpace,AName,ATypeInfo,strData); PutStr(ANameSpace,AName,ATypeInfo,strData);
End; End;
{$IFDEF WST_UNICODESTRING} {$IFDEF WST_UNICODESTRING}
@ -1949,7 +1949,7 @@ begin
{$ENDIF HAS_QWORD} {$ENDIF HAS_QWORD}
tkLString{$IFDEF FPC},tkAString{$ENDIF} : tkLString{$IFDEF FPC},tkAString{$ENDIF} :
begin begin
strData := string(AData); strData := AnsiString(AData);
dataBuffer := strData; dataBuffer := strData;
end; end;
tkWString : tkWString :
@ -2087,7 +2087,7 @@ begin
strData := ''; strData := '';
Result := GetStr(ATypeInfo,ANameSpace,AName,strData); Result := GetStr(ATypeInfo,ANameSpace,AName,strData);
if Result then if Result then
String(AData) := strData; AnsiString(AData) := strData;
End; End;
{$IFDEF WST_UNICODESTRING} {$IFDEF WST_UNICODESTRING}
tkUString : tkUString :
@ -2222,7 +2222,7 @@ begin
{$IFDEF HAS_QWORD} {$IFDEF HAS_QWORD}
tkQWord : QWord(AData) := StrToQWordDef(Trim(dataBuffer),0); tkQWord : QWord(AData) := StrToQWordDef(Trim(dataBuffer),0);
{$ENDIF HAS_QWORD} {$ENDIF HAS_QWORD}
tkLString{$IFDEF FPC},tkAString{$ENDIF} : string(AData) := dataBuffer; tkLString{$IFDEF FPC},tkAString{$ENDIF} : AnsiString(AData) := dataBuffer;
tkWString : WideString(AData) := dataBuffer; tkWString : WideString(AData) := dataBuffer;
{$IFDEF WST_UNICODESTRING} {$IFDEF WST_UNICODESTRING}
tkUString : UnicodeString(AData) := dataBuffer; tkUString : UnicodeString(AData) := dataBuffer;

View File

@ -1433,7 +1433,7 @@ begin
{$ENDIF HAS_QWORD} {$ENDIF HAS_QWORD}
tkLString{$IFDEF FPC},tkAString{$ENDIF} : tkLString{$IFDEF FPC},tkAString{$ENDIF} :
Begin Begin
strData := String(AData); strData := AnsiString(AData);
PutStr(AName,ATypeInfo,strData); PutStr(AName,ATypeInfo,strData);
End; End;
tkWString : tkWString :
@ -1562,7 +1562,7 @@ begin
{$ENDIF HAS_QWORD} {$ENDIF HAS_QWORD}
tkLString{$IFDEF FPC},tkAString{$ENDIF} : tkLString{$IFDEF FPC},tkAString{$ENDIF} :
begin begin
strData := string(AData); strData := AnsiString(AData);
dataBuffer := strData; dataBuffer := strData;
end; end;
tkWString : tkWString :
@ -1706,7 +1706,7 @@ begin
strData := ''; strData := '';
Result := GetStr(ATypeInfo,AName,strData); Result := GetStr(ATypeInfo,AName,strData);
if Result then if Result then
String(AData) := strData; AnsiString(AData) := strData;
End; End;
{$IFDEF WST_UNICODESTRING} {$IFDEF WST_UNICODESTRING}
tkUString : tkUString :
@ -1842,7 +1842,7 @@ begin
{$IFDEF HAS_QWORD} {$IFDEF HAS_QWORD}
tkQWord : QWord(AData) := StrToQWordDef(Trim(dataBuffer),0); tkQWord : QWord(AData) := StrToQWordDef(Trim(dataBuffer),0);
{$ENDIF HAS_QWORD} {$ENDIF HAS_QWORD}
tkLString{$IFDEF FPC},tkAString{$ENDIF} : string(AData) := dataBuffer; tkLString{$IFDEF FPC},tkAString{$ENDIF} : AnsiString(AData) := dataBuffer;
tkWString : WideString(AData) := dataBuffer; tkWString : WideString(AData) := dataBuffer;
{$IFDEF WST_UNICODESTRING} {$IFDEF WST_UNICODESTRING}
tkUString : UnicodeString(AData) := dataBuffer; tkUString : UnicodeString(AData) := dataBuffer;

View File

@ -34,6 +34,10 @@ Type
TWideStringData = WideString; TWideStringData = WideString;
{$IFDEF WST_UNICODESTRING} {$IFDEF WST_UNICODESTRING}
TUnicodeStringData = UnicodeString; TUnicodeStringData = UnicodeString;
{$ELSE WST_UNICODESTRING}
UnicodeString = WideString;
TUnicodeStringData = UnicodeString;
UnicodeChar = WideChar;
{$ENDIF WST_UNICODESTRING} {$ENDIF WST_UNICODESTRING}
TAnsiCharacter = AnsiChar; TAnsiCharacter = AnsiChar;
TWideCharacter = WideChar; TWideCharacter = WideChar;