* more handling of varUString in Variant utility functions

This commit is contained in:
Sven/Sarah Barth 2025-12-24 13:56:57 +01:00
parent 8b6de92c9c
commit 090df8e689
2 changed files with 15 additions and 0 deletions

View File

@ -2327,6 +2327,10 @@ begin
Dest.vType := varOleStr;
Dest.vOleStr := nil;
WideString(Pointer(Dest.vOleStr)) := WideString(Pointer(vOleStr));
end else if vType = varUString then begin
Dest.vType := varUString;
Dest.vustring := Nil;
UnicodeString(Dest.vustring) := UnicodeString(vustring);
end else if vType = varAny then begin
Dest := Source;
RefAnyProc(Dest);
@ -2456,6 +2460,11 @@ begin
varDate: SysVarFromTDateTime(Variant(aDest), VariantToDate(aSource));
{$endif}
varOleStr: DoVarCastWStr(aDest, aSource);
varUString: begin
DoVarClearIfComplex(aDest);
aDest.vType := aVarType;
UnicodeString(aDest.vustring) := VariantToUnicodeString(aSource);
end;
varBoolean: SysVarFromBool(Variant(aDest), VariantToBoolean(aSource));
varShortInt: SysVarFromInt(Variant(aDest), VariantToShortInt(aSource), -1);
varByte: SysVarFromInt(Variant(aDest), VariantToByte(aSource), 1);

View File

@ -77,6 +77,8 @@ begin
;
varOleStr:
WideString(Pointer(VOleStr)):='';
varUString:
UnicodeString(VUString):='';
varDispatch,
varUnknown:
iinterface(vunknown):=nil;
@ -115,6 +117,8 @@ begin
Move(VBytes, VargDest.VBytes, SizeOf(VargDest.VBytes));
varOleStr:
CopyAsWideString(VargDest.VOleStr,VOleStr);
varUString:
UnicodeString(VargDest.vustring):=UnicodeString(vustring);
varDispatch:
IUnknown(VargDest.vdispatch):=IUnknown(VargSrc.vdispatch);
varUnknown:
@ -156,6 +160,7 @@ begin
VarQWord : VargDest.VQWord:=PQWord(VPointer)^;
varVariant : Variant(VargDest):=Variant(PVarData(VPointer)^);
varOleStr : CopyAsWideString(VargDest.VOleStr,PVarData(VPointer)^.VoleStr);
varUString : VargDest.vustring:=PUnicodeString(VPointer)^;
varDispatch,
varUnknown : IInterface(VargDest.vUnknown):=IInterface(PInterface(VargSrc.VPointer)^);
else
@ -200,6 +205,7 @@ begin
VarInt64 : VargDest.Vint64:=VariantToInt64(Tmp);
VarLongWord : VargDest.VLongWord:=VariantToCardinal(Tmp);
VarQWord : VargDest.VQWord:=VariantToQword(tmp);
varUString : UnicodeString(VargDest.vustring):=UnicodeString(tmp.vustring);
else
Result:=VAR_BADVARTYPE;
end;