Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Standard OCX Versions-Info auslesen (https://www.delphipraxis.net/109530-standard-ocx-versions-info-auslesen.html)

wisher 3. Mär 2008 09:44


Standard OCX Versions-Info auslesen
 
Hallo,

das Problem klingt trivial, eine Lösung habe ich allerdings noch nicht gefunden.
Ich habe ein ActiveX (OCX), welches als Plugin in einer Art Container (C++ - Anwendung) läuft.

Ich möchte nun die Versions-Information meines OCX ermitteln. Die üblichen Möglichkeiten, z.B.
über GetFileVersionInfoSize(PChar(ParamStr(0)... scheitern daran, dass ParamStr(0), den Pfad
der Rahmenapplikation, also des Containers ermittelt. Das eigentliche Grundproblem ist also,
dass ich programmintern weder Name noch Pfad meines OCX kenne.

Weiß jemand Rat?

Viele Grüße
S.L.

shmia 3. Mär 2008 13:09

Re: Standard OCX Versions-Info auslesen
 
Wenn du die GUID der Typlib hast, kannst du mit QueryPathOfRegTypeLib() den Pfad der Typlib abfragen.
Da ja die Typelib in aller Regel in der OCX als Resource enthalten ist, hast du damit den vollen Pfad (+Namen) zur OCX-Datei.

Zitat:

Das eigentliche Grundproblem ist also, dass ich programmintern weder Name noch Pfad meines OCX kenne.
Was hast du dann überhaupt ? Eine GUID einer CoClass oder ein Interface-Pointer oder ?

wisher 3. Mär 2008 13:27

Re: Standard OCX Versions-Info auslesen
 
Die GUID der CoClass hätte ich schon und auf die Idee den Pfad aus der Registry auszulesen
würde ich ja zurückgreifen... wenn da nicht die Tatsache wäre, dass wir unsere ActiveX Plugins
nicht registrieren dürfen. Momentan arbeiten wir über eine Manifest-Datei, mit deren Hilfe wir die
Registrierung umgehen können. Jetzt ist es natürlich nahe liegend den Pfad aus der Manifest Datei
zu beziehen, doch der steht da nicht drin. Da Manifest-Dateien nicht mit Pfaden jeglicher Art umgehen
können, müssen Host-Anwendung, Plugins und Manifest Datei an einem Ort stehen.
Mit ExtractFilePath(ParamStr(0)) bekäme ich also schon den Pfad der Host-Anwendung heraus, der im Moment
jedenfalls noch der gleiche ist wie der der Plugins. Nun fehlt mir aber immer noch der Name der
OCX-Komponente.

Da ich nicht davon ausgehe, dass in Zukunft die OCX immer an der gleichen Stelle liegt, wie die Host-Anwendung,
habe ich es momentan so gelöst, dass ich den Pfad der OCX mit GetCurrentDirectory auslese und den OCX-Namen
hardcodiert dran hänge. Über diese Infos kann ich dann wie gehabt die Version auslesen.

Sehr sauber ist diese Lösung natürlich nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 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