|
@@ -594,47 +594,79 @@ end;
|
|
|
|
|
|
|
|
|
|
function Sysvartoint (const v : Variant) : Longint;
|
|
function Sysvartoint (const v : Variant) : Longint;
|
|
|
|
+var Handler: TCustomVariantType;
|
|
|
|
+ dest: TVarData;
|
|
begin
|
|
begin
|
|
if VarType(v) = varNull then
|
|
if VarType(v) = varNull then
|
|
if NullStrictConvert then
|
|
if NullStrictConvert then
|
|
VarCastError(varNull, varInt64)
|
|
VarCastError(varNull, varInt64)
|
|
else
|
|
else
|
|
Result := 0
|
|
Result := 0
|
|
|
|
+ else if FindCustomVariantType(TVarData(v).vType, Handler) then
|
|
|
|
+ begin
|
|
|
|
+ VariantInit(dest);
|
|
|
|
+ Handler.CastTo(dest, TVarData(v), varInteger);
|
|
|
|
+ Result := dest.vinteger;
|
|
|
|
+ end
|
|
else
|
|
else
|
|
Result := VariantToLongInt(TVarData(V));
|
|
Result := VariantToLongInt(TVarData(V));
|
|
end;
|
|
end;
|
|
|
|
|
|
function Sysvartoint64 (const v : Variant) : Int64;
|
|
function Sysvartoint64 (const v : Variant) : Int64;
|
|
|
|
+var Handler: TCustomVariantType;
|
|
|
|
+ dest: TVarData;
|
|
begin
|
|
begin
|
|
if VarType(v) = varNull then
|
|
if VarType(v) = varNull then
|
|
if NullStrictConvert then
|
|
if NullStrictConvert then
|
|
VarCastError(varNull, varInt64)
|
|
VarCastError(varNull, varInt64)
|
|
else
|
|
else
|
|
Result := 0
|
|
Result := 0
|
|
|
|
+ else if FindCustomVariantType(TVarData(v).vType, Handler) then
|
|
|
|
+ begin
|
|
|
|
+ VariantInit(dest);
|
|
|
|
+ Handler.CastTo(dest, TVarData(v), varInt64);
|
|
|
|
+ Result := dest.vint64;
|
|
|
|
+ end
|
|
else
|
|
else
|
|
Result := VariantToInt64(TVarData(V));
|
|
Result := VariantToInt64(TVarData(V));
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
function sysvartoword64 (const v : Variant) : QWord;
|
|
function sysvartoword64 (const v : Variant) : QWord;
|
|
|
|
+var Handler: TCustomVariantType;
|
|
|
|
+ dest: TVarData;
|
|
begin
|
|
begin
|
|
if VarType(v) = varNull then
|
|
if VarType(v) = varNull then
|
|
if NullStrictConvert then
|
|
if NullStrictConvert then
|
|
VarCastError(varNull, varQWord)
|
|
VarCastError(varNull, varQWord)
|
|
else
|
|
else
|
|
Result := 0
|
|
Result := 0
|
|
|
|
+ else if FindCustomVariantType(TVarData(v).vType, Handler) then
|
|
|
|
+ begin
|
|
|
|
+ VariantInit(dest);
|
|
|
|
+ Handler.CastTo(dest, TVarData(v), varQWord);
|
|
|
|
+ Result := dest.vqword;
|
|
|
|
+ end
|
|
else
|
|
else
|
|
Result := VariantToQWord (TVarData(V));
|
|
Result := VariantToQWord (TVarData(V));
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
function sysvartobool (const v : Variant) : Boolean;
|
|
function sysvartobool (const v : Variant) : Boolean;
|
|
|
|
+var Handler: TCustomVariantType;
|
|
|
|
+ dest: TVarData;
|
|
begin
|
|
begin
|
|
if VarType(v) = varNull then
|
|
if VarType(v) = varNull then
|
|
if NullStrictConvert then
|
|
if NullStrictConvert then
|
|
VarCastError(varNull, varBoolean)
|
|
VarCastError(varNull, varBoolean)
|
|
else
|
|
else
|
|
Result := False
|
|
Result := False
|
|
|
|
+ else if FindCustomVariantType(TVarData(v).vType, Handler) then
|
|
|
|
+ begin
|
|
|
|
+ VariantInit(dest);
|
|
|
|
+ Handler.CastTo(dest, TVarData(v), varBoolean);
|
|
|
|
+ Result := dest.vboolean;
|
|
|
|
+ end
|
|
else
|
|
else
|
|
Result := VariantToBoolean(TVarData(V));
|
|
Result := VariantToBoolean(TVarData(V));
|
|
end;
|
|
end;
|