![]() |
Ole Automation? Variants? Was ist das?
Guten Tag,
Ich habe neuerdings Ole-Objekte " ![]() Ich habe bereits ein bisschen recherchiert und Sachen wie Ole-Automation (Beispiele mit Word Dokumenten) gefunden. Jedoch sind die Artikel/Tutorials dazu nicht wirklich aufklärend. Was ich bisher so aus eigener Interpretation verstanden habe..: 1. man kann am System (OS) Objekte (Klassen/Funktionen?) registrieren 2. Anwendungen können über CreateOleObject (mehr?) diese Objekte&/Methoden importieren und verwenden Meine Fragen nun dazu: - wie funktioniert 1, wie bewerkstellige ich das selber? - wo schlage ich für 2. nach um rauszufinden, was so alles ein Objekt drauf hat (Methoden? CLSID?) Ich stell mir das momentan so ähnlich wie das Verwenden von Win-API Funktionen vor. Gibt es für OLE Objekte, die z.B. vom BS bereitgestellt werden, eine Doku/Spezifikation usw.? Ich wünsche euch frohe Weihnachten und vorzeitig einen guten Rutsch ins neue Jahr. |
AW: Ole Automation? Variants? Was ist das?
Zitat:
Selbst kannst du das machen indem du bei Delphi die entsprechenden Wizards über "Neu" bemühst. Zitat:
Microsoft stellt mit OleView ein Tool bereit mit der man die registrieten Anwendungen durchsuchen kann. Aber jeder Hersteller sollte normalerweise eine Schnittstellenbeschreibung liefern. |
AW: Ole Automation? Variants? Was ist das?
Wo ist die Frage zu den Variants?
![]() Selbst genutzt hab ich das noch nicht, aber es gibt bestimmt Tutorials dafür. Im Prinzip erstellt man ein Interface, welches, bzw. dessen DLL bei Windows registriert wird. Und das dann von anderen Programmen abgefragt werden kann. z.B. die Interfaces des MS-XML-DOM (IXMLDocument usw.) ![]() über ![]() |
AW: Ole Automation? Variants? Was ist das?
Danke.
Zu Variants - meistens wird das in Verbindung mit Ole Objekten verwendet; ich wusste z.B. nicht, dass Variants wie Klasseninstanzen behandelt und beliebige (Ole) Methoden darüber aufgerufen werden können. Ich werde weiter recherchieren, bis ich eine kleine Demo dazu schreibe, und ab und zu hier nachkucken, sofern etwas neues hinzukommt. |
AW: Ole Automation? Variants? Was ist das?
In Delphi wird der Vaiant mehr wie ein Record verwaltet.
Du kannst das mit den Record Operatoren vergleichen, wo in dem Variant schon automatische Konvertierungen integriert sind. Aber eigentlich ist das ein Windows-Typ, ähnlich dem WideString, welcher im Delphi entsprechend weggekapselt ist.
Delphi-Quellcode:
Die Unit Variants wäre noch interessant, wo viele Funktionen drin sind, um die Typen manuell umzuwandeln oder um zu prüfen welcher Typ grade im Variant steckt.
var
X: Variant; X := 123; ShowMessage(IntToStr(X)); ShowMessage(X); X := 'abc'; ShowMessage(X); X := '789'; ShowMessage(X); ShowMessage(IntToStr(X + 210)); Und falls man selber den Variant erweitern will, dann könnte man beim TVariantManager weiter suchen. Bissl was zum Aufbau, falls dich das interessiert (system.pas):
Delphi-Quellcode:
varEmpty = $0000; { vt_empty 0 }
varNull = $0001; { vt_null 1 } varSmallint = $0002; { vt_i2 2 } varInteger = $0003; { vt_i4 3 } varSingle = $0004; { vt_r4 4 } varDouble = $0005; { vt_r8 5 } varCurrency = $0006; { vt_cy 6 } varDate = $0007; { vt_date 7 } varOleStr = $0008; { vt_bstr 8 } varDispatch = $0009; { vt_dispatch 9 } varError = $000A; { vt_error 10 } varBoolean = $000B; { vt_bool 11 } varVariant = $000C; { vt_variant 12 } varUnknown = $000D; { vt_unknown 13 } //varDecimal = $000E; { vt_decimal 14 } {UNSUPPORTED as of v6.x code base} //varUndef0F = $000F; { undefined 15 } {UNSUPPORTED per Microsoft} varShortInt = $0010; { vt_i1 16 } varByte = $0011; { vt_ui1 17 } varWord = $0012; { vt_ui2 18 } varLongWord = $0013; { vt_ui4 19 } varInt64 = $0014; { vt_i8 20 } varUInt64 = $0015; { vt_ui8 21 } varRecord = $0024; { VT_RECORD 36 } { if adding new items, update Variants' varLast, BaseTypeMap and OpTypeMap } varStrArg = $0048; { vt_clsid 72 } varObject = $0049; { 73 } varUStrArg = $004A; { 74 } varString = $0100; { Pascal string 256 } {not OLE compatible } varAny = $0101; { Corba any 257 } {not OLE compatible } varUString = $0102; { Unicode string 258 } {not OLE compatible } // custom types range from $110 (272) to $7FF (2047) varTypeMask = $0FFF; varArray = $2000; varByRef = $4000; TVarData = packed record case Integer of 0: (VType: TVarType; case Integer of 0: (Reserved1: Word; case Integer of 0: (Reserved2, Reserved3: Word; case Integer of varSmallInt: (VSmallInt: SmallInt); varInteger: (VInteger: Integer); varSingle: (VSingle: Single); varDouble: (VDouble: Double); varCurrency: (VCurrency: Currency); varDate: (VDate: TDateTime); varOleStr: (VOleStr: PWideChar); varDispatch: (VDispatch: Pointer); varError: (VError: HRESULT); varBoolean: (VBoolean: WordBool); varUnknown: (VUnknown: Pointer); varShortInt: (VShortInt: ShortInt); varByte: (VByte: Byte); varWord: (VWord: Word); varLongWord: (VLongWord: LongWord); varInt64: (VInt64: Int64); varUInt64: (VUInt64: UInt64); varString: (VString: Pointer); varAny: (VAny: Pointer); varArray: (VArray: PVarArray); varByRef: (VPointer: Pointer); varUString: (VUString: Pointer); varRecord: (VRecord: TVarRecord); //$ffff: (VLargest: TLargestVarData); ); 1: (VLongs: array[0..{$IFDEF CPUX64}4{$ELSE}2{$ENDIF}] of LongInt); ); 2: (VWords: array [0..{$IFDEF CPUX64}10{$ELSE}6{$ENDIF}] of Word); 3: (VBytes: array [0..{$IFDEF CPUX64}21{$ELSE}13{$ENDIF}] of Byte); ); 1: (RawData: array [0..{$IFDEF CPUX64}5{$ELSE}3{$ENDIF}] of LongInt); end; |
AW: Ole Automation? Variants? Was ist das?
Zitat:
Der folgende Code wird also vom Compiler durchgelassen, führt aber zu einem Laufzeitfehler:
Delphi-Quellcode:
var
V: Variant; begin V := 1; V.Hurz; end; |
AW: Ole Automation? Variants? Was ist das?
Das ist alles echt aufklärend! Danke soweit.
Wie kommts, dass ich soetwas praktische nie gebraucht habe xD Man lernt nie aus. Ich macht dann mal weiter mit dem Einlesen (regsvr, clsids).. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz