AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi OLE -> GetActiveOleObject / bzw. Nutzen in anderer Unit
Thema durchsuchen
Ansicht
Themen-Optionen

OLE -> GetActiveOleObject / bzw. Nutzen in anderer Unit

Ein Thema von Andy386 · begonnen am 22. Mai 2008 · letzter Beitrag vom 23. Mai 2008
Antwort Antwort
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#1

OLE -> GetActiveOleObject / bzw. Nutzen in anderer Unit

  Alt 22. Mai 2008, 15:21
ich bin's schon wieder.
Hab immernoch keine Ahnung von Delphi und wieder ein neues Problem:
Ich habe eine Komponente, auf die ich mittels OLE zugreifen muss (es handelt sich um ein Messprogramm)
Der Aufruf von GetActiveOleObject('ole-Name') bringt die Exeption "Vorgang nicht verfügbar", der nur in der IDE auftritt.
Ich hab ein bisschen gegoogelt, aber nicht wirklich was passendes zu gefunden. Wie kann man denn die Abfrage machen, ob ein OLE-Objekt schon offen ist und in dem Falle gleich den Pointer/Variant auf das offene Object setzen ?

Darauf zielt auch schon meine nächste Frage: Wie kann ich ein offenes OLE-Object (also die Anwendung an sich) mit einer anderen Unit nutzen ?
Mein Code zurzeit zu dem OLE:
Hauptunit:
Delphi-Quellcode:
OLE : Variant;
....
OLE := GetActiveOleObject('ole-name');
     except
        OLE := CreateOleObject('ole-name');
        OLE.Show;
     end;
Und in der neuen Unit steht dasselbe
PS: ich nutze Delphi7
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: OLE -> GetActiveOleObject / bzw. Nutzen in anderer Un

  Alt 22. Mai 2008, 15:47
Gibt es für dieses OLE Objekt eine Typenbibliothek? Such mal im Programmverzeichnis der betreffenden Anwendung nach Dateien mit der Endung *.TLB.

Wenn ja, dann kannst du diese einfach nach Delphi importieren. Delphi generiert dann Wrapper-Komponenten über die du auf den OLE Server zugreifen kannst. Diese kannst du so einstellen, dass sie entweder auf eine laufende Instanz des Servers zugreifen oder immer eine neue Instanz erzeugen (z.B. indem du ConnectKind auf ckRunningOrNew setzt um eine neue Instanz zu erzeugen wenn der Server noch nicht läuft oder die laufende zu verwenden wenn er schon läuft).

Delphi liefert schon einige fertig importierte Wrapper-Komponenten für die MS-Office Programm mit. (z.B. TWordDocument und TWordApplication). Dort kannst du dir ansehen, wie man mit solchen Wrappern arbeitet.

Beim Import der Typenbibliothek kannst du angeben, ob die Wrapper-Komponenten erzeugt und in der IDE installiert werden sollen. Unter D7 war der Import (WMMGNT *) unter "Projekt/Typenbibliothek importieren" zu finden.

Ciao,
Ralf

* WMMGNT = Wenn mich mein Gedächtnichs nicht trügt
Ralf Kaiser
  Mit Zitat antworten Zitat
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#3

Re: OLE -> GetActiveOleObject / bzw. Nutzen in anderer Un

  Alt 22. Mai 2008, 16:03
Da ist leider keine tdl-datei.
Kann man die nachträglich erzeugen ?
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: OLE -> GetActiveOleObject / bzw. Nutzen in anderer Un

  Alt 22. Mai 2008, 16:09
Zitat von Andy386:
Da ist leider keine tdl-datei.
Kann man die nachträglich erzeugen ?
Leider nein. Die TLB wird vom Hersteller eines OLE Servers mitgeliefert (muss aber nicht...)

Du könntes aber mal versuchen, ob sich eine der DLLs im Verzeichnis der Anwendung als COM Server importieren lässt! Delphi benötigt dazu nämlich nicht zwingend eine TLB-Datei. Ich habe bei verschiedenen Servern schon einen Import gemacht indem ich einfach der Reihe nach alle vorhandenen DLLs versucht habe zu importieren. Ist eine DLL kein COM-Server so gibt Delphi eine Fehlermeldung aus. Ansonsten wird der Server importiert wie bei eine TLB-Datei.

Um welchen Server handelt es sich denn (aus deiner Beschreibung "ein Messprogramm" schliesse ich, dass es nicht unbedingt etwas bekanntes ist)
Ralf Kaiser
  Mit Zitat antworten Zitat
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#5

Re: OLE -> GetActiveOleObject / bzw. Nutzen in anderer Un

  Alt 23. Mai 2008, 09:33
Es handelt sich um Scout.
Also eher was kleines
[edit]Das Problem mit GetActiveOleObject erübrigt sich, da ich das zweite anders gelöst habe[/edit]

zum zweiten:
Ich hab jetzt einfach meine main-Unit in der Mess-unit im uses (nach Implementation) hinzugefügt. Ist aber gar nicht schön, weil die Mess-Unit auch für andere Projekte da ist. [edit] Aber Delphi unterstützt ja Präprozessorbefehle...[edit]
  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 15:57 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