AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

COM+ und OleVariant

Ein Thema von svehei · begonnen am 1. Aug 2003 · letzter Beitrag vom 4. Aug 2003
Antwort Antwort
svehei

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

COM+ und OleVariant

  Alt 1. Aug 2003, 17:49
hallo zusammen,

kann mir jemand sagen wie ich aus einem OleVariant, den ich von einer COM+-Interfacemethode zurueck/gesetzt bekomme ermitteln kann ob es sich um ein Array handelt oder einen String und falls es ein Array ist wieviele Dimensionen es hat und wie Tief jede Dimension ist.

ich bin da schon ne ganze zeit dran ohne loesung - wie ich den typ herausbekomme (integer, variant, string, ...) ist klar: VarType. Nur das mit den Arrays macht mir noch maechtig zu schaffen - hat da bitte jemand ne loesung?!

besten dank

sven
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

Re: COM+ und OleVariant

  Alt 1. Aug 2003, 17:55
Die bekommst Du, meines Erachtens auch mit VarType heraus. Schau mal die Definitionen für varString etc. an. Da gibt es auch die BitMasken für Arrays und andere grausige Kombinationen.

......

P.S. Mein Arbeitsrechner ist gerade "out of order", sonst gäbe es genauere Infos.
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
svehei

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

Re: COM+ und OleVariant

  Alt 4. Aug 2003, 10: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
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#4

Re: COM+ und OleVariant

  Alt 4. Aug 2003, 11:33
So, und jetzt das ganze mal abändern, dann sollte es gehen:
Delphi-Quellcode:
var
  VT: TVarType;

....

  VT := VarType(lValue);
  case VT and varTypeMask 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;
  if VT and varArray then
    WriteLn('als Array');
  if VT and varByRef then
    WriteLn('als Referenz (Pointer)');
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
svehei

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

Re: COM+ und OleVariant

  Alt 4. Aug 2003, 11:41
DANKE !!!!!!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz