mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-22 17:18:15 +02:00
215 lines
5.3 KiB
PHP
215 lines
5.3 KiB
PHP
Resourcestring
|
|
|
|
SNoWidestrings = 'No widestrings supported';
|
|
SNoInterfaces = 'No interfaces supported';
|
|
|
|
Procedure NoWidestrings;
|
|
|
|
begin
|
|
Raise Exception.Create(SNoWideStrings);
|
|
end;
|
|
|
|
Procedure NoInterfaces;
|
|
|
|
begin
|
|
Raise Exception.Create(SNoInterfaces);
|
|
end;
|
|
|
|
Constructor EVariantError.CreateCode (Code : longint);
|
|
|
|
begin
|
|
ErrCode:=Code;
|
|
end;
|
|
|
|
Procedure VariantTypeMismatch;
|
|
|
|
begin
|
|
Raise EVariantError.CreateCode(VAR_TYPEMISMATCH);
|
|
end;
|
|
|
|
Function ExceptionToVariantError (E : Exception): HResult;
|
|
|
|
begin
|
|
If E is EoutOfMemory then
|
|
Result:=VAR_OUTOFMEMORY
|
|
else
|
|
Result:=VAR_EXCEPTION;
|
|
end;
|
|
|
|
{ ---------------------------------------------------------------------
|
|
OS-independent functions not present in Windows
|
|
---------------------------------------------------------------------}
|
|
|
|
Function VariantToSmallInt(Const VargSrc : TVarData) : SmallInt;
|
|
|
|
begin
|
|
With VargSrc do
|
|
Case (VType and VarTypeMask) of
|
|
VarSmallInt: Result:=VSmallInt;
|
|
VarInteger : Result:=VInteger;
|
|
VarSingle : Result:=Round(VSingle);
|
|
VarDouble : Result:=Round(VDouble);
|
|
VarCurrency: Result:=Round(VCurrency);
|
|
VarDate : Result:=Round(VDate);
|
|
VarOleStr : NoWideStrings;
|
|
VarBoolean : Result:=SmallInt(VBoolean);
|
|
VarByte : Result:=VByte;
|
|
else
|
|
VariantTypeMismatch;
|
|
end;
|
|
end;
|
|
|
|
Function VariantToLongint(Const VargSrc : TVarData) : Longint;
|
|
|
|
begin
|
|
With VargSrc do
|
|
Case (VType and VarTypeMask) of
|
|
VarSmallInt: Result:=VSmallInt;
|
|
VarInteger : Result:=VInteger;
|
|
VarSingle : Result:=Round(VSingle);
|
|
VarDouble : Result:=Round(VDouble);
|
|
VarCurrency: Result:=Round(VCurrency);
|
|
VarDate : Result:=Round(VDate);
|
|
VarOleStr : NoWideStrings;
|
|
VarBoolean : Result:=Longint(VBoolean);
|
|
VarByte : Result:=VByte;
|
|
else
|
|
VariantTypeMismatch;
|
|
end;
|
|
end;
|
|
|
|
Function VariantToSingle(Const VargSrc : TVarData) : Single;
|
|
|
|
begin
|
|
With VargSrc do
|
|
Case (VType and VarTypeMask) of
|
|
VarSmallInt: Result:=VSmallInt;
|
|
VarInteger : Result:=VInteger;
|
|
VarSingle : Result:=VSingle;
|
|
VarDouble : Result:=VDouble;
|
|
VarCurrency: Result:=VCurrency;
|
|
VarDate : Result:=VDate;
|
|
VarOleStr : NoWideStrings;
|
|
VarBoolean : Result:=Longint(VBoolean);
|
|
VarByte : Result:=VByte;
|
|
else
|
|
VariantTypeMismatch;
|
|
end;
|
|
end;
|
|
|
|
Function VariantToDouble(Const VargSrc : TVarData) : Double;
|
|
|
|
begin
|
|
With VargSrc do
|
|
Case (VType and VarTypeMask) of
|
|
VarSmallInt: Result:=VSmallInt;
|
|
VarInteger : Result:=VInteger;
|
|
VarSingle : Result:=VSingle;
|
|
VarDouble : Result:=VDouble;
|
|
VarCurrency: Result:=VCurrency;
|
|
VarDate : Result:=VDate;
|
|
VarOleStr : NoWideStrings;
|
|
VarBoolean : Result:=Longint(VBoolean);
|
|
VarByte : Result:=VByte;
|
|
else
|
|
VariantTypeMismatch;
|
|
end;
|
|
end;
|
|
|
|
Function VariantToCurrency(Const VargSrc : TVarData) : Currency;
|
|
|
|
begin
|
|
Try
|
|
With VargSrc do
|
|
Case (VType and VarTypeMask) of
|
|
VarSmallInt: Result:=VSmallInt;
|
|
VarInteger : Result:=VInteger;
|
|
VarSingle : Result:=FloatToCurr(VSingle);
|
|
VarDouble : Result:=FloatToCurr(VDouble);
|
|
VarCurrency: Result:=VCurrency;
|
|
VarDate : Result:=FloatToCurr(VDate);
|
|
VarOleStr : NoWideStrings;
|
|
VarBoolean : Result:=Longint(VBoolean);
|
|
VarByte : Result:=VByte;
|
|
else
|
|
VariantTypeMismatch;
|
|
end;
|
|
except
|
|
On EConvertError do
|
|
VariantTypeMismatch;
|
|
else
|
|
Raise;
|
|
end;
|
|
end;
|
|
|
|
Function VariantToDate(Const VargSrc : TVarData) : TDateTime;
|
|
|
|
begin
|
|
Try
|
|
With VargSrc do
|
|
Case (VType and VarTypeMask) of
|
|
VarSmallInt: Result:=FloatToDateTime(VSmallInt);
|
|
VarInteger : Result:=FloatToDateTime(VInteger);
|
|
VarSingle : Result:=FloatToDateTime(VSingle);
|
|
VarDouble : Result:=FloatToDateTime(VDouble);
|
|
VarCurrency: Result:=FloatToDateTime(VCurrency);
|
|
VarDate : Result:=VDate;
|
|
VarOleStr : NoWideStrings;
|
|
VarBoolean : Result:=FloatToDateTime(Longint(VBoolean));
|
|
VarByte : Result:=FloatToDateTime(VByte);
|
|
else
|
|
VariantTypeMismatch;
|
|
end;
|
|
except
|
|
On EConvertError do
|
|
VariantTypeMismatch;
|
|
else
|
|
Raise;
|
|
end;
|
|
end;
|
|
|
|
Function VariantToBoolean(Const VargSrc : TVarData) : Boolean;
|
|
|
|
begin
|
|
With VargSrc do
|
|
Case (VType and VarTypeMask) of
|
|
VarSmallInt: Result:=VSmallInt<>0;
|
|
VarInteger : Result:=VInteger<>0;
|
|
VarSingle : Result:=VSingle<>0;
|
|
VarDouble : Result:=VDouble<>0;
|
|
VarCurrency: Result:=VCurrency<>0;
|
|
VarDate : Result:=VDate<>0;
|
|
VarOleStr : NoWideStrings;
|
|
VarBoolean : Result:=VBoolean;
|
|
VarByte : Result:=VByte<>0;
|
|
else
|
|
VariantTypeMismatch;
|
|
end;
|
|
end;
|
|
|
|
Function VariantToByte(Const VargSrc : TVarData) : Byte;
|
|
|
|
begin
|
|
Try
|
|
With VargSrc do
|
|
Case (VType and VarTypeMask) of
|
|
VarSmallInt: Result:=VSmallInt;
|
|
VarInteger : Result:=VInteger;
|
|
VarSingle : Result:=Round(VSingle);
|
|
VarDouble : Result:=Round(VDouble);
|
|
VarCurrency: Result:=Round(VCurrency);
|
|
VarDate : Result:=Round(VDate);
|
|
VarOleStr : NoWideStrings;
|
|
VarBoolean : Result:=Longint(VBoolean);
|
|
VarByte : Result:=VByte;
|
|
else
|
|
VariantTypeMismatch;
|
|
end;
|
|
except
|
|
On EConvertError do
|
|
VariantTypeMismatch;
|
|
else
|
|
Raise;
|
|
end;
|
|
end;
|