|
@@ -30,6 +30,20 @@ begin
|
|
SafeArrayUnlock(P);
|
|
SafeArrayUnlock(P);
|
|
end;
|
|
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.
|
|
Basic variant handling.
|
|
---------------------------------------------------------------------}
|
|
---------------------------------------------------------------------}
|
|
@@ -59,7 +73,7 @@ begin
|
|
varCurrency, varDate, varError, varBoolean, varByte,VarShortInt,
|
|
varCurrency, varDate, varError, varBoolean, varByte,VarShortInt,
|
|
varInt64, VarLongWord,VarQWord:;
|
|
varInt64, VarLongWord,VarQWord:;
|
|
varOleStr:
|
|
varOleStr:
|
|
- NoWideStrings;
|
|
|
|
|
|
+ WideString(Pointer(VOleStr)):='';
|
|
varDispatch,
|
|
varDispatch,
|
|
varUnknown:
|
|
varUnknown:
|
|
NoInterfaces;
|
|
NoInterfaces;
|
|
@@ -93,7 +107,7 @@ begin
|
|
varInt64, VarLongWord,VarQWord:
|
|
varInt64, VarLongWord,VarQWord:
|
|
Move(VBytes, VargDest.VBytes, SizeOf(VargDest.VBytes));
|
|
Move(VBytes, VargDest.VBytes, SizeOf(VargDest.VBytes));
|
|
varOleStr:
|
|
varOleStr:
|
|
- NoWideStrings; // We should copy here...
|
|
|
|
|
|
+ CopyAsWideString(VargDest.VOleStr,VOleStr);
|
|
varDispatch,
|
|
varDispatch,
|
|
varUnknown:
|
|
varUnknown:
|
|
NoInterfaces; // We should bump up reference count here (Addref)
|
|
NoInterfaces; // We should bump up reference count here (Addref)
|
|
@@ -130,7 +144,7 @@ begin
|
|
VarLongWord : VargDest.VLongWord:=PCardinal(VPointer)^;
|
|
VarLongWord : VargDest.VLongWord:=PCardinal(VPointer)^;
|
|
VarQWord : VargDest.VQWord:=PQWord(VPointer)^;
|
|
VarQWord : VargDest.VQWord:=PQWord(VPointer)^;
|
|
varVariant : Variant(VargDest):=Variant(PVarData(VPointer)^);
|
|
varVariant : Variant(VargDest):=Variant(PVarData(VPointer)^);
|
|
- varOleStr : NoWideStrings;
|
|
|
|
|
|
+ varOleStr : CopyAsWideString(VargDest.VOleStr,PVarData(VPointer)^.VoleStr);
|
|
varDispatch,
|
|
varDispatch,
|
|
varUnknown : NoInterfaces;
|
|
varUnknown : NoInterfaces;
|
|
else
|
|
else
|
|
@@ -141,9 +155,6 @@ begin
|
|
Result:=VAR_OK;
|
|
Result:=VAR_OK;
|
|
end;
|
|
end;
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
Function VariantChangeTypeEx(var VargDest: TVarData; const VargSrc: TVarData;
|
|
Function VariantChangeTypeEx(var VargDest: TVarData; const VargSrc: TVarData;
|
|
LCID: Integer; Flags: Word; VarType: Word): HRESULT; stdcall;
|
|
LCID: Integer; Flags: Word; VarType: Word): HRESULT; stdcall;
|
|
var
|
|
var
|
|
@@ -167,7 +178,7 @@ begin
|
|
varDouble : VargDest.VDouble:=VariantToDouble(Tmp);
|
|
varDouble : VargDest.VDouble:=VariantToDouble(Tmp);
|
|
varCurrency : VargDest.VCurrency:=VariantToCurrency(Tmp);
|
|
varCurrency : VargDest.VCurrency:=VariantToCurrency(Tmp);
|
|
varDate : VargDest.VDate:=VariantToDate(tmp);
|
|
varDate : VargDest.VDate:=VariantToDate(tmp);
|
|
- varOleStr : NoWidestrings;
|
|
|
|
|
|
+ varOleStr : MakeWideString(VargDest.VoleStr, VariantToWideString(tmp));
|
|
varDispatch : Result:=VAR_TYPEMISMATCH;
|
|
varDispatch : Result:=VAR_TYPEMISMATCH;
|
|
varUnknown : Result:=VAR_TYPEMISMATCH;
|
|
varUnknown : Result:=VAR_TYPEMISMATCH;
|
|
varBoolean : VargDest.VBoolean:=VariantToBoolean(Tmp);
|
|
varBoolean : VargDest.VBoolean:=VariantToBoolean(Tmp);
|
|
@@ -812,7 +823,10 @@ end;
|
|
{$endif HASVARIANT}
|
|
{$endif HASVARIANT}
|
|
{
|
|
{
|
|
$Log$
|
|
$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
|
|
+ First working variant support
|
|
|
|
|
|
Revision 1.4 2001/08/19 21:02:02 florian
|
|
Revision 1.4 2001/08/19 21:02:02 florian
|