mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 12:23:24 +01:00 
			
		
		
		
	* big variant from Thorsten Engler, fixes and improves several variant stuff
git-svn-id: trunk@6747 -
This commit is contained in:
		
							parent
							
								
									b06b453ee1
								
							
						
					
					
						commit
						a99b5470af
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1633,9 +1633,10 @@ IMPLEMENTATION
 | 
			
		||||
{$else}
 | 
			
		||||
      BCD.Places := 4;
 | 
			
		||||
{$endif}
 | 
			
		||||
      CurrToBCD := False;
 | 
			
		||||
      if Decimals <> 4
 | 
			
		||||
        then NormalizeBCD ( BCD, BCD, Precision, Decimals );
 | 
			
		||||
      if Decimals <> 4 then
 | 
			
		||||
        Result := NormalizeBCD ( BCD, BCD, Precision, Decimals )
 | 
			
		||||
      else
 | 
			
		||||
        CurrToBCD := True;
 | 
			
		||||
     end;
 | 
			
		||||
 | 
			
		||||
{$ifdef comproutines}
 | 
			
		||||
 | 
			
		||||
@ -70,6 +70,8 @@ resourcestring
 | 
			
		||||
  SInvalidVarCast        = 'Invalid variant type cast';
 | 
			
		||||
  SInvalidVarNullOp      = 'Invalid NULL variant operation';
 | 
			
		||||
  SInvalidVarOp          = 'Invalid variant operation';
 | 
			
		||||
  SInvalidBinaryVarOp    = 'Invalid variant operation %s %s %s';
 | 
			
		||||
  SInvalidUnaryVarOp     = 'Invalid variant operation %s %s';
 | 
			
		||||
  SInvalidVarOpWithHResultWithPrefix = 'Invalid variant operation (%s%.8x)'+LineEnding+'%s';
 | 
			
		||||
  SNoError               = 'No error.';
 | 
			
		||||
  SNoThreadSupport       = 'Threads not supported. Recompile program with thread driver.';
 | 
			
		||||
 | 
			
		||||
@ -48,25 +48,39 @@ function SafeArrayUnlock(psa: PVarArray): HRESULT; stdcall;
 | 
			
		||||
 | 
			
		||||
{ Conversion routines NOT in windows oleaut }
 | 
			
		||||
 | 
			
		||||
Function VariantToSmallInt(Const VargSrc : TVarData) : SmallInt;
 | 
			
		||||
Function VariantToLongint(Const VargSrc : TVarData) : Longint;
 | 
			
		||||
Function VariantToShortint(Const VargSrc : TVarData) : ShortInt;
 | 
			
		||||
Function VariantToCardinal(Const VargSrc : TVarData) : Cardinal;
 | 
			
		||||
Function VariantToSingle(Const VargSrc : TVarData) : Single;
 | 
			
		||||
Function VariantToDouble(Const VargSrc : TVarData) : Double;
 | 
			
		||||
Function VariantToCurrency(Const VargSrc : TVarData) : Currency;
 | 
			
		||||
Function VariantToDate(Const VargSrc : TVarData) : TDateTime;
 | 
			
		||||
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;
 | 
			
		||||
function VariantToSmallInt(const VargSrc : TVarData) : SmallInt;
 | 
			
		||||
function VariantToLongint(const VargSrc : TVarData) : Longint;
 | 
			
		||||
function VariantToShortint(const VargSrc : TVarData) : ShortInt;
 | 
			
		||||
function VariantToCardinal(const VargSrc : TVarData) : Cardinal;
 | 
			
		||||
function VariantToSingle(const VargSrc : TVarData) : Single;
 | 
			
		||||
function VariantToDouble(const VargSrc : TVarData) : Double;
 | 
			
		||||
function VariantToCurrency(const VargSrc : TVarData) : Currency;
 | 
			
		||||
function VariantToDate(const VargSrc : TVarData) : TDateTime;
 | 
			
		||||
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);
 | 
			
		||||
Procedure DumpVariant(Var F : Text; Const VArgSrc : TVarData);
 | 
			
		||||
procedure DumpVariant(const VSrc : Variant);
 | 
			
		||||
procedure DumpVariant(const aName: string; const VSrc : Variant);
 | 
			
		||||
procedure DumpVariant(var F : Text; const VSrc : Variant);
 | 
			
		||||
procedure DumpVariant(var F : Text; const aName: string; const VSrc : Variant);
 | 
			
		||||
 | 
			
		||||
procedure DumpVariant(const VArgSrc : TVarData);
 | 
			
		||||
procedure DumpVariant(const aName: string; const VArgSrc : TVarData);
 | 
			
		||||
procedure DumpVariant(var F : Text; const VArgSrc : TVarData);
 | 
			
		||||
procedure DumpVariant(var F : Text; const aName: string; const VArgSrc : TVarData);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{$IFDEF DEBUG_VARUTILS}
 | 
			
		||||
var
 | 
			
		||||
  __DEBUG_VARUTILS: Boolean;
 | 
			
		||||
{$ENDIF}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{$i varerror.inc}
 | 
			
		||||
@ -79,4 +93,7 @@ const
 | 
			
		||||
  ARR_DISPATCH      = $0400;
 | 
			
		||||
  ARR_VARIANT       = $0800;
 | 
			
		||||
 | 
			
		||||
  VAR_LOCALE_USER_DEFAULT = $400; // = Windows.LOCALE_USER_DEFAULT
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@
 | 
			
		||||
    Some general stuff: Error handling and so on.
 | 
			
		||||
  ---------------------------------------------------------------------}
 | 
			
		||||
 | 
			
		||||
{ we so ugly things with tvararray here }
 | 
			
		||||
{ we do ugly things with tvararray here }
 | 
			
		||||
{$RANGECHECKS OFF}
 | 
			
		||||
 | 
			
		||||
Procedure SetUnlockResult (P : PVarArray; Res : HResult);
 | 
			
		||||
@ -759,3 +759,5 @@ begin
 | 
			
		||||
    Result:=psa^.ElementSize;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user