AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi OleServer: Kein CoClass-Create, kein ConnectTo?
Thema durchsuchen
Ansicht
Themen-Optionen

OleServer: Kein CoClass-Create, kein ConnectTo?

Ein Thema von FoxOne · begonnen am 23. Sep 2008 · letzter Beitrag vom 25. Sep 2008
Antwort Antwort
FoxOne

Registriert seit: 24. Mai 2007
Ort: Wien
7 Beiträge
 
#1

OleServer: Kein CoClass-Create, kein ConnectTo?

  Alt 23. Sep 2008, 10:48
Hallo, Delphi Experten!

Ich bin recht neu auf dem Gebiet von COM bzw. ActiveX und hänge nun mit Verständnisproblemen.
Durch 'Import Type Library' habe ich aus einer dll einen tlb-File mit Wrapper erzeugt und nach Vorschrift des Herstellers einen Client erstellt - passt alles.
Nun habe ich auch selbst einen Automation Object geschrieben, das wie auch die dll Events unterstützt. Dabei habe ich folgenden Unterschied bemerkt.

Bei mir sieht die Server-Initialisierung im Client (z.B. im FormCreate) folgendermaßen aus:


Code:
FEventServer : IEventServer;
LocalEventServer : TEventServer;
procedure OnMyEvent(Sender : TObject);
..
..

  FEventServer:=CoEventServer.create;
  LocalEventServer:=TEventServer.create(nil);
  With LocalEventServer do
  begin
    AutoConnect:= False;
    ConnectTo(FEventServer);  
    LocalEventServer.OnServerEvent:=OnMyEvent;
  end;

Bei der dll reicht folgendes:

Code:
..
..
  ExternServer:=TExternServer.create(self);
  ExternServer.OnEvent1:=MYOnEvent1;
Hier wird also nicht das Create der CoClass aufgerufen, und auch das ConnectTo für die Events fehlt (setzte ich Autoconnect auf false und kommentiere ConnectTo aus, bekomme ich bei jedem Event eine Exception). Kann mir jemand den Unterschied erklären bzw. erläutern, wie ich mein Automation Object so hinbringe, dass es gleich verwendbar ist wie die dll?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: OleServer: Kein CoClass-Create, kein ConnectTo?

  Alt 23. Sep 2008, 11:26
Was soll man das jetzt erklären? Das sieht wie zwei verschiedene Sachen aus und die kann man nicht vergleichen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
FoxOne

Registriert seit: 24. Mai 2007
Ort: Wien
7 Beiträge
 
#3

Re: OleServer: Kein CoClass-Create, kein ConnectTo?

  Alt 24. Sep 2008, 08:42
Das hilft mir jetzt nicht viel weiter.

Es ist mir klar, dass es sich um unterschiedliche Dinge handelt. Dieser Unterschied interessiert mich ja. Warum ist kein Vergleich möglich? Eine Antwort darauf könnte auch eine Hilfe sein. Wenn Information fehlt, liefere ich gerne etwas nach.

Wie gesagt, ich habe die tlb von der dll gewonnen. Somit nehme ich an, dass es auch mit Delphi möglich sein wird, in gleicher Weise ein dll zu erzeugen, bei der dann im Client kein CoMyClass.Create aufgerufen werden muss, sondern TMyClass.Create reicht - ist diese Annahme falsch?
Vielleicht kann die CoClasse automatisch kreiert werden?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: OleServer: Kein CoClass-Create, kein ConnectTo?

  Alt 24. Sep 2008, 14:28
Mal sehen, ob ich dich richtig verstanden habe...


Also die TLB (mittels Typbibliothek importieren) gibt die verschiedene Möglichkeiten, um auf ein Interface zuzugreifen:
  1. Das Dispinterface (sofern möglich)
  2. das Duale Interface (also ganz normal: type xaz=interface(Ixxxx))
  3. eine kleine coClass zu dem dualen Interface
  4. Eine Klasse, die komplett das duale Interface kapselt
Du kannst also jetzt die Deklarationen von 1. und 2. nutzen und mit der WinAPI-Funktion GetXXXObject dir ein Object erzeugen.
Wenn du nicht über die WinApi gehen willst, dann nimmst du die CoClass. Ansonsten ist alles dasselbe. Du musst nur nicht mehr die CLSID etc. wissen bei der CoClass.
Das 4. ist eine komplette Klasse, die das Interface kapselt. Die benutzt du wie jede andere Klasse auch und brauchst dich dabei mit dem ganzen Rest (Interfaces etc.) aus der TLB nicht zu
beschäftigen.

(Wenn dann noch Automatisierungsobjekte in der Bibliothek sind, gibt es dann noch für die späte Bindung eine weitere Möglichkeit, dafür braucht man aber keine TLB.)

Und jetzt verstehe ich nicht, wann und wo bist du in welcher DLL und in welchem Programm :Gruebel:
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
FoxOne

Registriert seit: 24. Mai 2007
Ort: Wien
7 Beiträge
 
#5

Re: OleServer: Kein CoClass-Create, kein ConnectTo?

  Alt 25. Sep 2008, 13:08
Danke für die Informationen (ich weiss, es ist für einen Insider sicher eine blöde Frage). Alles verstehe ich leider nicht, aber ich will einmal die genauen Umstände erklären.

Ich erhielt zur Programmierung eines Messystems eine API in Form eines (einer?) dll und eines Manuals. Das System erfordert die Bearbeitung von vielen Events, weil die Bestätigung von Messparameteränderung von mir durch Events erfolgen. Dabei gibt es auch viele Fehlerquellen, die sich physikalisch bzw. hardwaretechnisch nicht so einfach erzeugen lassen, aber für meine Mess-Software sehr wichtig sind. Um das zu testen, dachte ich, ich baue einfach dieses dll nach und setzte dahinter ein simuliertes System. Dadurch kann ich die Fehler selber erzeugen und testen, ob die Mess-Software richtig darauf reagiert.

Alles, was ich bisher von COM, tlb etc. weiss, habe ich mir dafür kürzlich erarbeitet und bin nun in der Lage, mit solchen Dingen wie Enums, IEnumVariants und Events umzugehen. Ich muss aber zugeben, dass es mir in dieser Zeit nicht ganz gelungen ist, das 'Gesamtbild' zu verstehen.
Zum Beispiel kann ich mir den genannten Unterschied beim Create nicht erklären. Die CoClass-Deklaration findet sich durchaus in der tlb:

Delphi-Quellcode:
CoDatServer = class
    class function Create: IDatServer;
    class function CreateRemote(const MachineName: string): IDatServer;
end;
Aber in meinem Messprogramm muss ich das nicht aufgerufen (dort wie erwähnt reicht DatServ:=TDatServer.create), sehr wohl aber in meinem Nachbau.

Und wie das kommt, hätte ich gerne gewusst.
  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 01:16 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