AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi COM Typenbibliothek - dispinterface und Records

COM Typenbibliothek - dispinterface und Records

Ein Thema von jensw_2000 · begonnen am 3. Okt 2007 · letzter Beitrag vom 3. Okt 2007
Antwort Antwort
jensw_2000
(Gast)

n/a Beiträge
 
#1

COM Typenbibliothek - dispinterface und Records

  Alt 3. Okt 2007, 03:13
Ich habe eine ActiveX Bibliothek mit einem Automatisierungs-Objekt angelegt.
In der Typenbibliothek habe ich unter Anderem einige Enum-Typen und einige Records deklariert.

Die Records werden in der _TLB in den "dispinterface Deklarationen" nicht erkannt, und durch OleVariant ersetzt.
Bei den IDiapatch Deklarationen klappt das mit den Records.

Im Typenbibliotheks-Editor sieht noch alles richtig aus ...
Delphi-Quellcode:
IPDDAPIaxEvents = dispinterface
  [ uuid '{12345678-A8C6-44CE-BFF9-F5257644C83D}',
    version 1.0,
    helpstring 'Ereignis-Schnittstelle für PDDAPIax-Objekt' ]
  procedure OnErrorInfo(var aErrorInfo: TRecErrorInfo) [dispid $000000CE]; stdcall;
end;
... in der _TLB steht die Deklaration nachher falsch drin ...
procedure OnErrorInfo(var aErrorInfo: {??TRecErrorInfo}OleVariant); dispid 206;
TRecErrorInfo enthält einen Enum.Typen, einen Integer und einen WideString
Delphi-Quellcode:
TErrorSource = (
  [ uuid '{12345678-9482-4133-8FF8-3442B2D34AE2}',
    version 1.0 ]
  esApplication = 1;
  esPDDAPI = 2;
  esNetwork = 3;
  esServer = 4;
);

TRecErrorInfo = record
  [ uuid '{12345678-DE0C-48AA-94FE-2855D7D9942B}',
    version 1.0 ]
  ErrorSource: TErrorSource;
  ErrorID: Integer;
  ErrorText: WideString;
end;
Wie übergebe ich Records an ein EventObjekt bzw. an das dispinterface ?
Kann mit jemand stichpunktartig die Hintergründe erläutern ?

Danke,
schönen Feiertag,
Jens
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: COM Typenbibliothek - dispinterface und Records

  Alt 3. Okt 2007, 07:38
Moin Jens,

weil du nur mit OLE-kompatiblen Typen arbeiten darfst, musst du deinen Record auf einen unterstützten Typ abbilden. Aus dem Record wird dann ein VarArray und die einzelnen Felder werden zu varByte, varInteger und VarOleStr.

OLE soll nach dem Willen der Designer plattform-unabhängig sein, weshalb der einzige strukturierte Typ ein Array sein darf. Das funktioniert ganz gut, wenn du die Schnittstelle selbst entwirfst. Musst du mit einer fremden Schnittstelle arbeiten, dann hilft manchmal nur noch die Holzhammermethode.

In deinem Fall würde ich statt des Records eine dedizierte Schnittstelle entwerfen, deren Eigenschaften den Feldern deines Records entsprechen.

Freundliche Grüße
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#3

Re: COM Typenbibliothek - dispinterface und Records

  Alt 3. Okt 2007, 10:16
Zitat von marabu:
Moin Jens,

.... musst du deinen Record auf einen unterstützten Typ abbilden. Aus dem Record wird dann ein VarArray und die einzelnen Felder werden zu varByte, varInteger und VarOleStr.
Wie mache ich das ?

Im Typenbilbiothekseditor kann ich nur Records, Unions und Enumerationen anlegen.
Enumerationen werden automatisch zu TOleEnum.
Die Auswahl der Feldtypen für Records und Unions sind sehr beschränkt. varByte, varInteger und VarOleStr sind leider nicht darunter.
Ich möchte eigentlich erreichen, das alle Methoden nur einen "Record" als Parameter verwenden. Da dieser später problemlos um weitere Felder ergänzt werden kann.



Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: COM Typenbibliothek - dispinterface und Records

  Alt 3. Okt 2007, 10:27
Zitat von jensw_2000:
Wie mache ich das ?
Im Typenbilbiothekseditor kann ich nur Records, Unions und Enumerationen anlegen.
Du kannst ein Interface anlegen, diesem Methoden und Eigenschaften verpassen und dann eine CoClass anlegen, die dieses Interface implementiert.
Der TLB Editor wird dann autom. der CoClass alles geben was sie braucht um dein Interface implementieren zu können.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:50 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