Zitat von
Mavarik:
Außerdem fehlt der Dispose/Free und in der Anleitung steht extra drin, dass man sich darum selber kümmern muss.
Das mag für C++ gelten. Bei Delphi werden Variants aber finalisiert.
Aber man sollte die Variant-Variable erst mal analysieren:
Delphi-Quellcode:
TargetCommando(2233,EmptyParam,ValOut); // IDM_GETBLOCKFMTS
ShowMessage(VarVarTypeAsString(ValOut)); // Variant Datentyp anzeigen
Und hier die Hilfsfunktionen:
Delphi-Quellcode:
function VarTypeAsString(
const vt: Integer):
string;
begin
case vt
and varTypeMask
of
varEmpty: Result := '
Empty';
varNull: Result := '
Null';
varSmallint: Result := '
SmallInt';
varInteger: Result := '
Integer';
varSingle: Result := '
Single';
varDouble: Result := '
Double';
varCurrency: Result := '
Currency';
varDate: Result := '
Date';
varOleStr: Result := '
OleStr';
varDispatch: Result := '
Dispatch';
varError: Result := '
Error';
varBoolean: Result := '
Boolean';
varVariant: Result := '
Variant';
varUnknown: Result := '
Unknown';
varString: Result := '
String';
varAny: Result := '
Any';
varByte: Result := '
Byte';
// folgende Konstanten sind in Unit ActiveX deklariert
VT_UI4: Result := '
LongWord';
VT_PTR: Result := '
Pointer';
VT_DECIMAL: Result := '
Decimal (16Byte)';
VT_VOID: Result := '
void';
VT_SAFEARRAY: Result := '
safe-array';
VT_USERDEFINED: Result := '
UserDef';
VT_LPSTR: Result := '
PChar';
VT_FILETIME: Result := '
Filetime';
VT_BLOB: Result := '
Blob';
VT_STREAM: Result := '
Stream';
VT_STORAGE: Result := '
Storage';
VT_STREAMED_OBJECT: Result := '
Streamed Obj';
VT_STORED_OBJECT: Result := '
Stored Obj';
VT_BLOB_OBJECT: Result := '
Blob Obj';
VT_CF: Result := '
Clipboard Format';
VT_CLSID: Result := '
Class ID';
else
Result := Format('
0x%.8x',[vt]);
end;
if (vt
and varArray) <> 0
then
Result := '
array of ' + Result;
if (vt
and varByRef) <> 0
then
Result := '
*'+Result;
end;
function VarVarTypeAsString(
const v: Variant):
string;
begin
Result := VarTypeAsString(VarType(v));
end;
Wenn es sich bei dem Variant um ein Array handelt, wird das Ergebnis "array of ..." sein.
Wenn es ein Array ist, dann wird man jedes einzelne Element unter die Lupe nehmen.
Mindestens eines dieser Elemente hat einen VarType, der von Delphi nicht unterstützt wird.