Thema: Delphi COM+ und OleVariant

Einzelnen Beitrag anzeigen

svehei

Registriert seit: 10. Mär 2003
Ort: Bretten
54 Beiträge
 
Delphi 7 Professional
 
#3

Re: COM+ und OleVariant

  Alt 4. Aug 2003, 09:12
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
  Mit Zitat antworten Zitat