mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-02 15:39:26 +01:00
+ Real/Boolean support added, Start of string support
This commit is contained in:
parent
09c8fc2184
commit
a62da4ea8f
@ -328,10 +328,10 @@ begin
|
||||
VarSmallInt: Result:=VSmallInt;
|
||||
VarShortInt: Result:=VShortInt;
|
||||
VarInteger : Result:=VInteger;
|
||||
VarSingle : Result:=FloatToCurr(VSingle);
|
||||
VarDouble : Result:=FloatToCurr(VDouble);
|
||||
VarSingle : Result:=Trunc(VSingle);
|
||||
VarDouble : Result:=Trunc(VDouble);
|
||||
VarCurrency: Result:=VCurrency;
|
||||
VarDate : Result:=FloatToCurr(VDate);
|
||||
VarDate : Result:=Trunc(VDate);
|
||||
VarOleStr : NoWideStrings;
|
||||
VarBoolean : Result:=Longint(VBoolean);
|
||||
VarByte : Result:=VByte;
|
||||
@ -359,10 +359,10 @@ begin
|
||||
VarSmallInt: Result:=VSmallint;
|
||||
VarShortInt: Result:=VShortInt;
|
||||
VarInteger : Result:=VInteger;
|
||||
VarSingle : Result:=FloatToCurr(VSingle);
|
||||
VarDouble : Result:=FloatToCurr(VDouble);
|
||||
VarSingle : Result:=Trunc(VSingle);
|
||||
VarDouble : Result:=Trunc(VDouble);
|
||||
VarCurrency: Result:=VCurrency;
|
||||
VarDate : Result:=FloatToCurr(VDate);
|
||||
VarDate : Result:=Trunc(VDate);
|
||||
VarOleStr : NoWideStrings;
|
||||
VarBoolean : Result:=Longint(VBoolean);
|
||||
VarByte : Result:=VByte;
|
||||
@ -381,10 +381,57 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Function VariantToWideString(Const VargSrc : TVarData) : WideString;
|
||||
|
||||
Const
|
||||
BS : Array[Boolean] of WideString = ('False','True');
|
||||
|
||||
begin
|
||||
Try
|
||||
With VargSrc do
|
||||
Case (VType and VarTypeMask) of
|
||||
VarSmallInt : Result:=IntTostr(VSmallint);
|
||||
VarShortInt : Result:=IntToStr(VShortInt);
|
||||
VarInteger : Result:=IntToStr(VInteger);
|
||||
VarSingle : Result:=FloatToStr(VSingle);
|
||||
VarDouble : Result:=FloatToStr(VDouble);
|
||||
VarCurrency : Result:=IntToStr(VCurrency);
|
||||
VarDate : Result:=DateTimeToStr(VDate);
|
||||
VarOleStr : Result:=WideString(Pointer(VOleStr));
|
||||
VarBoolean : Result:=BS[VBoolean];
|
||||
VarByte : Result:=IntToStr(VByte);
|
||||
VarWord : Result:=IntToStr(VWord);
|
||||
VarLongWord : Result:=IntToStr(VLongWord);
|
||||
VarInt64 : Result:=IntToStr(VInt64);
|
||||
VarQword : Result:=IntToStr(VQWord);
|
||||
else
|
||||
VariantTypeMismatch;
|
||||
end;
|
||||
except
|
||||
On EConvertError do
|
||||
VariantTypeMismatch;
|
||||
else
|
||||
Raise;
|
||||
end;
|
||||
end;
|
||||
|
||||
Function VariantToAnsiString(Const VargSrc : TVarData) : AnsiString;
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
Function VariantToShortString(Const VargSrc : TVarData) : ShortString;
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
{$endif HASVARIANT}
|
||||
{
|
||||
$Log$
|
||||
Revision 1.3 2001-11-14 23:00:17 michael
|
||||
Revision 1.4 2001-11-15 22:33:14 michael
|
||||
+ Real/Boolean support added, Start of string support
|
||||
|
||||
Revision 1.3 2001/11/14 23:00:17 michael
|
||||
+ First working variant support
|
||||
|
||||
Revision 1.2 2001/08/19 21:02:02 florian
|
||||
|
||||
@ -144,6 +144,9 @@ Function VariantToBoolean(Const VargSrc : TVarData) : Boolean;
|
||||
Function VariantToByte(Const VargSrc : TVarData) : Byte;
|
||||
Function VariantToInt64(Const VargSrc : TVarData ) : Int64;
|
||||
Function VariantToQWord(Const VargSrc : TVarData ) : Qword;
|
||||
Function VariantToWideString(Const VargSrc : TVarData) : WideString;
|
||||
Function VariantToAnsiString(Const VargSrc : TVarData) : AnsiString;
|
||||
Function VariantToShortString(Const VargSrc : TVarData) : ShortString;
|
||||
|
||||
{Debug routines }
|
||||
Procedure DumpVariant(Const VArgSrc : TVarData);
|
||||
@ -176,7 +179,10 @@ const
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.3 2001-11-14 23:00:17 michael
|
||||
Revision 1.4 2001-11-15 22:33:14 michael
|
||||
+ Real/Boolean support added, Start of string support
|
||||
|
||||
Revision 1.3 2001/11/14 23:00:17 michael
|
||||
+ First working variant support
|
||||
|
||||
Revision 1.2 2001/08/19 21:02:02 florian
|
||||
|
||||
@ -30,6 +30,20 @@ begin
|
||||
SafeArrayUnlock(P);
|
||||
end;
|
||||
|
||||
Procedure MakeWideString (Var P : PWideChar; W : WideString);
|
||||
|
||||
begin
|
||||
WideString(Pointer(P)):=W;
|
||||
UniqueString(WideString(P));
|
||||
end;
|
||||
|
||||
Procedure CopyAsWideString (Var PDest : PWideChar; PSource : PWideChar);
|
||||
|
||||
begin
|
||||
WideString(Pointer(PDest)):=WideString(Pointer(PSource));
|
||||
UniqueString(WideString(PDest));
|
||||
end;
|
||||
|
||||
{ ---------------------------------------------------------------------
|
||||
Basic variant handling.
|
||||
---------------------------------------------------------------------}
|
||||
@ -59,7 +73,7 @@ begin
|
||||
varCurrency, varDate, varError, varBoolean, varByte,VarShortInt,
|
||||
varInt64, VarLongWord,VarQWord:;
|
||||
varOleStr:
|
||||
NoWideStrings;
|
||||
WideString(Pointer(VOleStr)):='';
|
||||
varDispatch,
|
||||
varUnknown:
|
||||
NoInterfaces;
|
||||
@ -93,7 +107,7 @@ begin
|
||||
varInt64, VarLongWord,VarQWord:
|
||||
Move(VBytes, VargDest.VBytes, SizeOf(VargDest.VBytes));
|
||||
varOleStr:
|
||||
NoWideStrings; // We should copy here...
|
||||
CopyAsWideString(VargDest.VOleStr,VOleStr);
|
||||
varDispatch,
|
||||
varUnknown:
|
||||
NoInterfaces; // We should bump up reference count here (Addref)
|
||||
@ -130,7 +144,7 @@ begin
|
||||
VarLongWord : VargDest.VLongWord:=PCardinal(VPointer)^;
|
||||
VarQWord : VargDest.VQWord:=PQWord(VPointer)^;
|
||||
varVariant : Variant(VargDest):=Variant(PVarData(VPointer)^);
|
||||
varOleStr : NoWideStrings;
|
||||
varOleStr : CopyAsWideString(VargDest.VOleStr,PVarData(VPointer)^.VoleStr);
|
||||
varDispatch,
|
||||
varUnknown : NoInterfaces;
|
||||
else
|
||||
@ -141,9 +155,6 @@ begin
|
||||
Result:=VAR_OK;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
|
||||
Function VariantChangeTypeEx(var VargDest: TVarData; const VargSrc: TVarData;
|
||||
LCID: Integer; Flags: Word; VarType: Word): HRESULT; stdcall;
|
||||
var
|
||||
@ -167,7 +178,7 @@ begin
|
||||
varDouble : VargDest.VDouble:=VariantToDouble(Tmp);
|
||||
varCurrency : VargDest.VCurrency:=VariantToCurrency(Tmp);
|
||||
varDate : VargDest.VDate:=VariantToDate(tmp);
|
||||
varOleStr : NoWidestrings;
|
||||
varOleStr : MakeWideString(VargDest.VoleStr, VariantToWideString(tmp));
|
||||
varDispatch : Result:=VAR_TYPEMISMATCH;
|
||||
varUnknown : Result:=VAR_TYPEMISMATCH;
|
||||
varBoolean : VargDest.VBoolean:=VariantToBoolean(Tmp);
|
||||
@ -812,7 +823,10 @@ end;
|
||||
{$endif HASVARIANT}
|
||||
{
|
||||
$Log$
|
||||
Revision 1.5 2001-11-14 23:00:17 michael
|
||||
Revision 1.6 2001-11-15 22:33:14 michael
|
||||
+ Real/Boolean support added, Start of string support
|
||||
|
||||
Revision 1.5 2001/11/14 23:00:17 michael
|
||||
+ First working variant support
|
||||
|
||||
Revision 1.4 2001/08/19 21:02:02 florian
|
||||
|
||||
Loading…
Reference in New Issue
Block a user