Hallo,
kennt jemand irgentwelche Tutorials, wie ich unter Lazarus (win32) COM-Objekte einbinden und nutzen/ansprechen kann? Ich finde dazu irgentwie nichts.
Habe eine Fremdsoftware, welche sich über COM fersteuern ließe, und das würde ich gern tun.
Danke
COM Objekte importieren, wie?
-
- Beiträge: 73
- Registriert: Fr 28. Mai 2010, 08:39
- OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0)
- CPU-Target: 32Bit
- Wohnort: Heidelberg
COM Objekte importieren, wie?
„Viel zu lernen du noch hast.“
(Yoda zu Dooku)
(Yoda zu Dooku)
-
- Beiträge: 73
- Registriert: Fr 28. Mai 2010, 08:39
- OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0)
- CPU-Target: 32Bit
- Wohnort: Heidelberg
Re: COM Objekte importieren, wie?
Danke, hab das Paket runtergeladen und installiert. Allerdings habe ich bei der Nutzung einige Verständnisschwirigkeiten. Laut Anleitung auf
http://wiki.freepascal.org/LazActiveX
gehört zu einer korrekten Initialisierung eines COM-Objektes (nachdem die Typbibliothek mit "Import Type Library" importiert wurde) folgendes:
Beispiel:
var
oEBP:=CoEBPControl.Create();
ActiveXContainer1.ComServer:=oEBP;
ActiveXContainer1.Active:=true;
also, Objektvariable anlegen, Objekt erstellen, dem ActiveX-Container das erstellte Objekt als ComServer zuweisen und aktivieren. Bei mir funktioniert nur die
Objekterstellung, das Zuweisen und Aktivieren des ActiveX-Containers fürt bei mir jedesmal zu Zugriffsfehlern bedingt durch falsche Casts usw..
ABER:
Bei mir funktioniert alles OHNE den ActiveX-Container korrekt, ich brauche nur das Objekt mit Create anlegen und kann dann über die von diesem bereitgestellten Funktionen Daten auslesen und auch senden. Die ferngesteuerte .exe verhält sich korrekt. Wozu dann überhaupt das ActiveX-Objekt? Hätte ich das garnicht installieren brauchen? Kann mir das jemand erklären?
http://wiki.freepascal.org/LazActiveX
gehört zu einer korrekten Initialisierung eines COM-Objektes (nachdem die Typbibliothek mit "Import Type Library" importiert wurde) folgendes:
Beispiel:
var
oEBP:=CoEBPControl.Create();
ActiveXContainer1.ComServer:=oEBP;
ActiveXContainer1.Active:=true;
also, Objektvariable anlegen, Objekt erstellen, dem ActiveX-Container das erstellte Objekt als ComServer zuweisen und aktivieren. Bei mir funktioniert nur die
Objekterstellung, das Zuweisen und Aktivieren des ActiveX-Containers fürt bei mir jedesmal zu Zugriffsfehlern bedingt durch falsche Casts usw..
ABER:
Bei mir funktioniert alles OHNE den ActiveX-Container korrekt, ich brauche nur das Objekt mit Create anlegen und kann dann über die von diesem bereitgestellten Funktionen Daten auslesen und auch senden. Die ferngesteuerte .exe verhält sich korrekt. Wozu dann überhaupt das ActiveX-Objekt? Hätte ich das garnicht installieren brauchen? Kann mir das jemand erklären?
„Viel zu lernen du noch hast.“
(Yoda zu Dooku)
(Yoda zu Dooku)
Re: COM Objekte importieren, wie?
Ich glaube die Dokumentation ist nicht ganz auf der Höhe.
Aber schön, wenn es bei dir nun klappt.
Aber schön, wenn es bei dir nun klappt.
-
- Beiträge: 203
- Registriert: Di 22. Sep 2009, 13:08
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: COM Objekte importieren, wie?
So ein ActiveXContainer ist doch normalerweise dazu da um ein ActiveX-Objekt grafisch anzuzeigen
(für eingebettete Mediaplayer, Web-Browser o.ä,)?!
Ein nicht-grafisches Objekt (z.B. eine Barcode-Reader-Schnittstelle) braucht ja kein Fenster.
Da braucht man dann auch keinen Container.
Wenn Zugriffsfehler kommen sind aber die Fehlermeldungen vom Container wohl nicht
ganz sauber ausprogrammiert.
(für eingebettete Mediaplayer, Web-Browser o.ä,)?!
Ein nicht-grafisches Objekt (z.B. eine Barcode-Reader-Schnittstelle) braucht ja kein Fenster.
Da braucht man dann auch keinen Container.
Wenn Zugriffsfehler kommen sind aber die Fehlermeldungen vom Container wohl nicht
ganz sauber ausprogrammiert.
-
- Beiträge: 73
- Registriert: Fr 28. Mai 2010, 08:39
- OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0)
- CPU-Target: 32Bit
- Wohnort: Heidelberg
Re: COM Objekte importieren, wie?
Also meine Anwendung war ein Programm zum Simulieren einer Modelleisenbahn. Und diese .exe (die hab ich auch über "Import Type Library" importiert, worauf er mir eine unit mit allen Schnittstellen usw. generiert hat) hatte eine COM-Schnittstelle, um die Zugdaten auslesen/beeinflussen zu können. Es könnte sein, das diese Anwendung nicht eingebettet laufen kann, sondern nur als Hauptprogramm und es deswegen zu den Fehlern kam als ich den Container aktivieren wollte. Da wäre es gut gewesen, wenn die Dokumentation wenigstens ein Beispiel ohne ActiveX-Container und eingebettete Objekte gehabt hätte.
„Viel zu lernen du noch hast.“
(Yoda zu Dooku)
(Yoda zu Dooku)