das ist leider nicht wirklich so einfach
ich habe das jetzt mit vartype weiterhin versucht, bekomme als return-wert aber immer eine unbekannte. vielleicht hilft dir mein code weiter:
COM-Interface-Methode:
(ich bekomme eine paramterliste mit kommas getrennt. diese splitte ich dann in die eigentlichen params (TStrings)
Delphi-Quellcode:
params := split(param, ',');
value := VarArrayCreate([0,1],varVariant);
for i := 0 to params.count -1 do
begin
value[i] := params[i];
value[i,1] := 'hier der rueckgabewert fuer den parameter';
end;
wobei value mein out-paramter und vom Typ OleVariant ist.
in meiner anwendung mache in nun die typüberprüfung wie folgt:
Delphi-Quellcode:
case varType(lValue)
of
varStrArg: Writeln('
COM-compatible string');
varEmpty : Writeln('
The variant is Unassigned');
varOleStr : Writeln('
Reference to a dynamically allocated UNICODE string.');
varVariant : Writeln('
A variant');
varString : Writeln('
Reference to a dynamically allocated string (not COM compatible)');
varNull : WriteLn('
The variant is Null.');
varSmallint : WriteLn('
16-bit signed integer (type Smallint in Delphi, short in C++ ).');
varInteger : WriteLn('
32-bit signed integer (type Integer in Delphi, int in C++).');
varSingle : WriteLn('
Single-precision floating-point value (type Single in Delphi, float in C++).');
varDouble : WriteLn('
Double-precision floating-point value (type double).');
varCurrency : WriteLn('
Currency floating-point value (type Currency).');
varDate : WriteLn('
Date and time value (type TDateTime).');
varDispatch : WriteLn('
Reference to an Automation object (an IDispatch interface pointer).');
varError : WriteLn('
Operating system error code.');
varBoolean : WriteLn('
16-bit boolean (type WordBool).');
varUnknown : WriteLn('
Reference to an unknown object (an IInterface or IUnknown interface pointer).');
varShortInt : WriteLn('
8-bit signed integer (type ShortInt in Delphi or signed char in C++)');
varByte : WriteLn('
A Byte');
varWord : WriteLn('
unsigned 16-bit value (Word)');
varLongWord : WriteLn('
unsigned 32-bit value (type LongWord in Delphi or unsigned long in C++)');
varInt64 : WriteLn('
64-bit signed integer (Int64 in Delphi or __int64 in C++)');
varAny : WriteLn('
A CORBA Any value.');
else
WriteLn('
Kein Typ erkannt!');
end;
und ich bekomme immer Kein Typ erkannt als Meldung. Ich moechte aber nur ein 2-dimensionales Array erhalten, der form
lValue[i,0] = Parameterbezeichner
lValue[i,1] = Parameterwert
Keine Ahnung wie ich das am geschicktesten hinbekommen ...
bin fuer jeden loesungansatz zu haben