Was sind COM / ActiveX / OCX? – Unterschiede und Zusammenhänge im Überblick
· Go Komura · COM, ActiveX, OCX, OLE, Windows-Entwicklung, Legacy-Technologie
COM / ActiveX / OCX – diese drei Begriffe tauchen in Windows-Legacy-Projekten meist im Paket auf.
- Ein Hersteller schickt eine
.ocx - Auf einem Access- oder VB6-Formular sitzt ein rätselhaftes Bauteil
- Direkt nachdem jemand sagt „das ist COM“, heißt es „das ist doch ActiveX“
- Danach kommen
regsvr32, 32 Bit/64 Bit und der IE-Modus alle auf einmal ins Gespräch
Ab diesem Punkt läuft das Gespräch meist auseinander. Die Begriffe liegen nah beieinander, und historisch überschneiden sie sich stark. Umgekehrt gilt: Kann man sie sauber trennen, werden Recherche, Migration und Erklärung deutlich einfacher.
Dieser Artikel ordnet was COM ist, was ActiveX ist und was OCX ist in einer Reihenfolge, in der Unterschiede und Zusammenhänge sichtbar werden.
Insbesondere wird klar, welches das Fundament, welches das Bauteil und welches die Datei ist.
Inhaltsverzeichnis
- Zuerst das Fazit (in einem Satz)
- Was dieser Artikel unter COM / ActiveX / OCX versteht
- Erst einmal auf einen Blick
- 3.1. Beziehungsdiagramm
- 3.2. Die kürzeste Begriffsübersicht
- Was ist COM?
- 4.1. Kurz gesagt
- 4.2. Was bei COM wichtig ist
- 4.3. Kurznotizen zu den Begriffen
- Was ist ActiveX?
- 5.1. Kurz gesagt
- 5.2. ActiveX ist nicht browserspezifisch
- Was ist OCX?
- 6.1. Kurz gesagt
- 6.2. Der Unterschied zu
.dll
- Die Unterschiede in einer Tabelle
- Wo es eingesetzt wurde
- Warum es leicht verwechselt wird
- Wie man es in der heutigen Praxis einordnen sollte
- Häufige Missverständnisse
- Checkpoints für die Recherche
- Zusammenfassung
- Quellen
1. Zuerst das Fazit (in einem Satz)
Grob, aber nützlich formuliert, sieht das so aus.
- COM ist das Fundament: der binäre Vertrag, über den Komponenten unter Windows miteinander kommunizieren
- ActiveX ist der COM-basierte Bauteil-Kontext: er tritt vor allem als Steuerelement auf, das in einen Host eingebettet wird
- OCX ist die Implementierungsdatei, die man bei ActiveX-Steuerelementen häufig sieht: sie begegnet einem als Dateiendung
- Kurz: COM = der Mechanismus, ActiveX = der Bauteil-Kontext, OCX = die Datei – mit diesem Rahmen bleibt es übersichtlich
- Die Erinnerung
ActiveX = das gefährliche alte Browser-Dingist halb richtig und halb unvollständig. ActiveX ist nicht auf Browser beschränkt OCX = ActiveXwird oft nahezu gleichbedeutend verwendet, streng genommen vermischt das aber ein Konzept mit einer Dateiendung- Es ist keine Technologie, auf die man heute neue Entwicklung aufbaut, aber man begegnet ihr noch in bestehenden Windows-Anwendungen, Office, Access, Geräte-SDKs und internen Webanwendungen
Der Ausgangspunkt ist, diese drei Fragen auseinanderzuhalten.
- Geht es um COM?
- Geht es um ein ActiveX-Steuerelement?
- Oder nennt jemand es nur so, weil eine
.ocx-Datei aufgetaucht ist?
Ist das klar, lichtet sich der Nebel erheblich.
2. Was dieser Artikel unter COM / ActiveX / OCX versteht
In der Praxis leben diese drei Begriffe oft recht unordentlich nebeneinander. Deshalb legt dieser Artikel zunächst die Bedeutungen fest.
- COM: das Windows-Komponentenmodell selbst. Das Fundament aus Interfaces, GUIDs, Registrierung und Aufruf
- ActiveX: auf COM aufbauende, einbettbare Steuerelemente und ihr Nutzungskontext. In der Praxis meist gleichbedeutend mit ActiveX-Steuerelementen
- OCX: die Dateiendung, die bei ActiveX-Steuerelement-Implementierungen häufig zu sehen ist.
.ocx
Eine kleine Ergänzung: historisch wurde der Begriff ActiveX zeitweise etwas breiter verwendet.
Die Stellen, an denen ActiveX in der heutigen Praxis für Verwirrung sorgt, drehen sich aber fast immer um Steuerelemente, Einbettung, Hosts, Browser und Registrierung.
Deshalb geht auch dieser Artikel grundsätzlich von ActiveX ≈ ActiveX-Steuerelement aus.
3. Erst einmal auf einen Blick
3.1. Beziehungsdiagramm
Am schnellsten sieht man das Gesamtbild auf einen Blick. Wer die Grafik nicht angezeigt bekommt, findet direkt darunter dieselbe Information als Aufzählung.
flowchart LR
COM["COM<br/>Fundament des binären Vertrags"] --> OLE["OLE / Automation<br/>Mechanismen für Einbettung und Automatisierung"]
OLE --> AX["ActiveX<br/>COM-basierter Steuerelement-Kontext"]
AX --> CTRL["ActiveX-Steuerelement"]
CTRL --> OCX["OCX (.ocx)<br/>Häufige Form der Implementierungsdatei"]
HOST["Host / Container<br/>IE / Access / VB6 / MFC / WinForms"] --> CTRL
Wichtig ist hier: COM und ActiveX sind nicht dasselbe Wort.
- COM ist das Fundament
- OLE / Automation ist der Mechanismus für Einbettung und Automatisierung
- ActiveX tritt als der darauf aufbauende Steuerelement-Kontext auf
- OCX ist die Datei, die man bei dieser Steuerelement-Implementierung häufig sieht
Fragt jemand also Ist ActiveX dasselbe wie COM?, lautet die Antwort: das Fundament ist COM, aber ActiveX ist nicht COM selbst.
3.2. Die kürzeste Begriffsübersicht
| Begriff | Erstes Verständnis |
|---|---|
| COM | Mechanismus, Vertrag, Fundament |
| ActiveX | Der Kontext COM-basierter, einbettbarer Bauteile |
| ActiveX-Steuerelement | Das tatsächlich auf einem Host platzierte Bauteil selbst |
| OCX | Die Dateiendung, die bei ActiveX-Steuerelementen häufig zu sehen ist |
| OLE / Automation | Mechanismen für Einbettung, Automatisierung und Integration |
Für die kürzeste Merkregel reicht das.
- COM ist der Mechanismus
- ActiveX ist der Bauteil-Kontext
- OCX ist die Datei
4. Was ist COM?
4.1. Kurz gesagt
COM steht für Component Object Model und ist der binäre Vertrag, über den Komponenten unter Windows miteinander kommunizieren.
Mit binärem Vertrag ist hier nicht eine Frage des Quellcodes oder der Sprachspezifikation gemeint, sondern eine Schnittstelle, deren Zusagen auch in kompilierter Form bestehen bleiben. Dass sich ein in C++ gebautes Bauteil aus einer anderen Sprache oder einer anderen Anwendung heraus verwenden lässt, liegt genau an diesem Vertrag.
Praktisch gesehen ist COM weniger eine Art, praktische Bibliotheken zu verteilen als vielmehr ein Mechanismus, der die Implementierung verbirgt und nur über den Vertrag verbindet.
Diese Punkte sind zum Beispiel typisch für COM (die Bedeutung der einzelnen Begriffe ist in 4.3 jeweils in einer Zeile zusammengefasst):
- Referenzzählung über
IUnknown - Interface-Suche über
QueryInterface - GUID-basierte Identifikation über
IIDundCLSID - Inprozess-Nutzung über DLLs
- Out-of-Prozess-Nutzung über EXEs
Kurz gesagt: COM ist das Fundament der Komponentenkultur unter Windows.
4.2. Was bei COM wichtig ist
Beschränkt man sich auf die Grundlagen, ist bei COM Folgendes wichtig.
- Interface-zentriert
- Was veröffentlicht wird, wird vor der Implementierung festgelegt
- Identifikation über GUID
- Klassen und Interfaces werden eindeutig identifiziert
- Trennung von Host und Implementierung
- Die aufrufende Seite muss die interne Implementierung nicht kennen
- Prozessgrenzen überschreitbar
- Bauteile lassen sich nicht nur im selben Prozess, sondern auch als Bauteile eines anderen Prozesses nutzen
Das ist der Grund, warum COM nicht einfach eine alte Technologie von gestern ist. Schon sehr früh war ein solides vertragsbasiertes, wiederverwendbares Design fest verankert.
4.3. Kurznotizen zu den Begriffen
Bei COM fliegen einem ohne weitere Erklärung sofort folgende Begriffe um die Ohren. Hier folgt zum Einstieg nur je eine Zeile pro Begriff. Wer bis zur gestalterischen Eleganz vordringen möchte, findet das in „Was ist COM? – Warum das Design von Windows COM auch heute noch schön ist“.
| Begriff | Bedeutung in einer Zeile |
|---|---|
| Interface | Die Reihenfolge von Funktionen, mit denen ein Bauteil zusagt: „Das kann man bei mir aufrufen.“ Von der Implementierung getrennt |
IUnknown |
Die Basis-Schnittstelle, auf der jedes COM-Interface aufbaut. Sie besitzt nur die drei Methoden QueryInterface / AddRef / Release |
QueryInterface |
Die Methode, mit der man ein vorliegendes Bauteil fragt: „Hast du auch dieses Interface?“ Ist es vorhanden, kommt der entsprechende Zeiger zurück |
| Referenzzählung | Ein Zähler, der die Anzahl der Nutzer zählt. AddRef erhöht ihn, Release verringert ihn, und bei 0 wird das Bauteil freigegeben |
| GUID | Kurz für Globally Unique Identifier – ein 128-Bit-Bezeichner in der Form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}. Er verhindert Namenskollisionen |
| CLSID | Kurz für Class ID – eine GUID, die angibt, „welches Bauteil (welche Klasse)“ gemeint ist. Auch die Registrierung wird über diesen Wert nachgeschlagen |
| IID | Kurz für Interface ID – eine GUID, die angibt, „welches Interface“ gemeint ist |
| ProgID | Ein für Menschen lesbarer Alias für eine CLSID. Eine Zeichenkette wie Excel.Application, mit der man ein Bauteil etwa aus einem Skript heraus anspricht |
| Typbibliothek | Daten, die die Typinformationen der von einem Bauteil veröffentlichten Interfaces und Methoden zusammenfassen. VB6 und .NET lesen sie, um ein Bauteil zu referenzieren |
| Apartment (STA / MTA) | Die Thread-Konvention von COM. STA bedeutet „dieses Bauteil wird nur von einem einzigen Thread aufgerufen“, MTA bedeutet „mehrere Threads dürfen gleichzeitig aufrufen“ – UI-Bauteile liegen fast immer auf der STA-Seite |
Dieser Artikel bleibt bei der begrifflichen Einordnung, auf die Details der einzelnen Punkte geht er nicht ein. Wird es später konkret, lassen sich die Begriffe aus dieser Tabelle direkt als Suchbegriffe verwenden.
5. Was ist ActiveX?
5.1. Kurz gesagt
ActiveX lässt sich am einfachsten als auf COM aufbauendes, wiederverwendbares Softwarebauteil verstehen, insbesondere als Steuerelement, das in einen Host oder Container eingebettet wird.
Sagt jemand in der Praxis ActiveX, ist damit ziemlich sicher ein ActiveX-Steuerelement gemeint.
Das betrifft zum Beispiel Schaltflächen, Tabellen, Diagramme, Kalender, Viewer oder Bauteile für die Gerätekopplung.
ActiveX lässt sich weniger treffend als große, für sich allein stehende Technologie verstehen, sondern eher als Bauteil, das eingebettet in einem Host arbeitet – mit diesem Bild liegt man selten falsch.
5.2. ActiveX ist nicht browserspezifisch
Der Eindruck ActiveX = das Internet-Explorer-Ding ist sehr stark.
Das ist nicht falsch, aber das ist nicht alles.
Hier einige Orte, an denen ActiveX-Steuerelemente verwendet wurden.
- Access-Formulare
- VB6-Anwendungen (Visual Basic 6.0)
- MFC-Container (Microsoft Foundation Class Library)
- rund um Office/VBA
- COM-Wrapper-Nutzung aus WinForms heraus
- Internet Explorer und sein Kompatibilitätsbetrieb
Kurz: ActiveX ist keine reine Browser-Technologie, sondern eine Bauteil-Technologie, die auch auf der Windows-Anwendungsseite lange verwendet wurde.
Ist das nicht klar, behandelt man ActiveX, das man in einer internen Webanwendung findet, und ActiveX, das in ein Access-Formular eingebettet ist, fälschlich als zwei verschiedene Dinge. In Wirklichkeit sind beide recht enge, COM-nahe Verwandte.
6. Was ist OCX?
6.1. Kurz gesagt
OCX ist die Dateiendung, die häufig für die Implementierung von ActiveX-Steuerelementen verwendet wird.
Findet man in der Windows-Praxis eine .ocx, darf man zunächst ein eingebettetes, steuerelementartiges COM-Bauteil vermuten.
Sie taucht meist an diesen Stellen auf.
- Auslieferungen eines Hersteller-SDKs
- alte VB6-/Access-/MFC-Projekte
- Registrierungsziele in einem Installationsprogramm
- Bauteile, die
regsvr32benötigen
Wichtig ist: OCX ist eine Dateiform, nicht das Konzept selbst.
Grob gesagt lautet die Antwort auf Was ist OCX? also: die Datei, der man als physische Form eines ActiveX-Steuerelements am häufigsten begegnet.
6.2. Der Unterschied zu .dll
Auch das ist eine häufige Quelle von Verwirrung.
.ocxdeutet ziemlich stark auf ein ActiveX-Steuerelement hin.dllkann eine gewöhnliche Bibliothek sein, ein COM-Server oder eine abhängige DLL rund um ActiveX
Sieht man eine .ocx, lässt sich ziemlich sicher auf ActiveX-Nähe schließen; eine .dll allein verrät noch nicht, worum es sich handelt.
In der Praxis ist es üblich, dass es so aussieht:
vendorcontrol.ocxvendorhelper.dllvendorcore.dll
wobei die OCX die Hauptrolle spielt und die DLLs unterstützend zur Seite stehen.
Fragt man also Ist OCX quasi eine Art DLL?, liegt das gefühlt nahe – bei Recherche und Migration ist es aber sicherer, die Rollen getrennt zu betrachten.
7. Die Unterschiede in einer Tabelle
| Begriff | Was es ist | In der Praxis häufig genannte Begriffe | Häufige physische Form |
|---|---|---|---|
| COM | Komponentenmodell, Fundament des binären Vertrags | IUnknown, QueryInterface, CLSID, IID, Apartment |
.dll, .exe, Registrierungsdaten |
| ActiveX | COM-basierter Steuerelement-Kontext | Container, Einbettung, Eigenschaften, Ereignisse | ActiveX-Steuerelement |
| ActiveX-Steuerelement | Das tatsächlich platzierte, wiederverwendbare Bauteil | Tabellen, Kalender, Viewer, Gerätekopplung | .ocx, .dll |
| OCX | Die Dateiendung, die bei ActiveX-Steuerelementen häufig zu sehen ist | regsvr32, Toolbox, 32 Bit/64 Bit |
xxx.ocx |
| OLE / Automation | Mechanismus für Einbettung und Automatisierung | Office-Integration, Eigenschaftsseiten, Automatisierung | verschiedene COM-basierte Funktionen |
Wer sich an dieser Tabelle orientieren möchte, sollte hiermit beginnen.
- COM ist das Fundament
- ActiveX ist die darauf aufbauende Bauteil-Kultur
- OCX ist die Datei, die man vor Ort findet
8. Wo es eingesetzt wurde
ActiveX/OCX wirken durch die starke Browser-Erinnerung leicht wie alte Web-Technologie.
Tatsächlich wurden sie aber wesentlich breiter eingesetzt.
Konkret an Orten wie diesen.
- Desktop-Anwendungen
- VB6
- MFC/C++
- Access-Formulare
- rund um Office/VBA
- Browser / interne Webanwendungen
- in den Internet Explorer eingebettete Viewer
- Signatur-Bauteile
- Bauteile für Dateiübertragung
- Bauteile für die Anbindung von Peripheriegeräten
- Bestehende .NET-Anwendungen
- bestehende ActiveX-Steuerelemente, aus WinForms heraus verpackt genutzt
- Fälle, in denen bestehende COM-Bestände als UI-Bauteile weiter am Leben gehalten werden
Auch hier landet man am Ende wieder bei dem Punkt, dass ActiveX nicht auf das Internet beschränkt ist. Es wirkt nur deshalb wie eine Web-Technologie, weil es durch den IE so auffällig wurde; in der Praxis passt es besser, es als eingebettete Bauteil-Technologie von Windows zu sehen.
9. Warum es leicht verwechselt wird
9.1. Unterschiedliche Sprachebenen tauchen im selben Gespräch auf
- COM ist eine Frage des Fundaments
- ActiveX ist eine Frage des Bauteil-Kontexts
- OCX ist eine Frage der Datei
Obwohl die Ebenen von vornherein unterschiedlich sind, tauchen sie in der Praxis am selben Ort gleichzeitig auf, sodass das Gespräch leicht durcheinandergerät.
9.2. Der Begriff ActiveX ist etwas weit gefasst
COM hat eine vergleichsweise feste Bedeutung.
ActiveX dagegen wird sowohl historisch als auch in der Praxis etwas breiter verwendet.
Je nach Person kann gemeint sein:
- das Steuerelement selbst
- die
.ocx-Datei - ein altes, im IE laufendes Bauteil
- COM-basierte eingebettete Bauteile im Allgemeinen
Welches davon gemeint ist, geht auseinander. An diesem Punkt läuft das Gespräch bereits nicht mehr zusammen.
9.3. Sobald man .ocx sieht, möchte man alles ActiveX nennen
Dieser Impuls ist verständlich. Im Alltag funktioniert das meist auch.
Bei Migration oder Recherche muss man aber getrennt betrachten,
- ob es ein UI-Bauteil ist
- in welchem Host es läuft
- ob eine Registrierung nötig ist
- wie es um 32 Bit/64 Bit steht
- ob eine Browser-Abhängigkeit besteht
sonst stolpert man später garantiert darüber.
10. Wie man es in der heutigen Praxis einordnen sollte
Zunächst: Nur weil man COM/ActiveX/OCX findet, muss man es nicht sofort komplett verwerfen. Alles mit derselben Gelassenheit zu behandeln, ist aber ebenfalls gefährlich.
Browserseitige ActiveX-Abhängigkeit
Hier ist es sicherer, bevorzugt streng hinzusehen.
- Sie gehört nicht zum Mainstream der modernen Browser-Entwicklung
- Im Kompatibilitätsbetrieb kommt der IE-Modus zur Sprache, aber der ist eher als Brücke für die Abwärtskompatibilität zu sehen
- Ihn als Grundlage für Neues zu wählen, lässt sich kaum empfehlen
Für die Einschätzung braucht man auch eine Zeitachse. Die IE11-Desktop-Anwendung ist bereits ausgemustert; der verbleibende Boden ist der IE-Modus von Microsoft Edge. Zu diesem IE-Modus hat Microsoft die Linie ausgegeben, ihn mindestens bis 2029 zu unterstützen und eine Abschaffung ein Jahr vorher anzukündigen. Das Jahr 2029 ist also keine „Frist, bis zu der man es liegen lassen darf“, sondern ein Termin, auf den man rückwärts rechnen sollte, um bis dahin fertig abgelöst zu haben. Das konkrete Vorgehen beim Ablösen ist gesondert im „Leitfaden zum Ausstieg aus der Abhängigkeit vom IE-Modus“ beschrieben.
Bei webseitigem ActiveX ist es realistischer, sich zu fragen, wo man es ablöst, statt wie man es am Leben erhält.
Desktopseitige ActiveX-/OCX-Abhängigkeit
Hier lässt sich pragmatischer entscheiden.
- Es läuft stabil innerhalb eines bestehenden Hosts
- Der Verteilungskreis ist begrenzt
- Es gibt eine Wartungsperspektive, ob durch den Hersteller oder im eigenen Haus
- Registrierung, abhängige DLLs und die Bitness-Annahmen sind bekannt
Sind diese Bedingungen erfüllt, ist die Entscheidung, es zu behalten, ganz normal.
Andererseits gilt: Wenn
- man eine 32-Bit-OCX unverändert in einen 64-Bit-Prozess laden möchte
- man nur das Umfeld auf .NET umstellen möchte
- Verteilung und Registrierung jedes Mal scheitern
- eine Browser-Abhängigkeit bestehen bleibt
ist es sicherer, Behalten / Kapseln / Ersetzen getrennt zu betrachten.
In der heutigen Praxis geht es nicht darum, ob ActiveX deshalb schlecht ist, sondern darum, wo man die Grenze zieht.
Sieht man es weniger als alte Technologie und mehr als Verbindungsstelle eines bestehenden Systems, lässt es sich leichter handhaben.
11. Häufige Missverständnisse
Missverständnis 1: COM = ActiveX
Falsch. COM ist das Fundament, ActiveX ist der darauf aufbauende Steuerelement-Kontext.
Missverständnis 2: ActiveX = Internet Explorer
Falsch. Dass ActiveX durch den IE bekannt wurde, stimmt, aber ActiveX ist nicht browserspezifisch.
Missverständnis 3: ActiveX = OCX
In der Praxis werden beide Begriffe sehr ähnlich verwendet, streng genommen unterscheiden sie sich aber. ActiveX betrifft den Kontext und das Bauteil, OCX ist die physische Form, der man als Dateiendung begegnet.
Missverständnis 4: OCX ist doch nur eine DLL, oder?
Grob gesagt liegt das nahe, bei der Recherche sollte man das aber nicht grob nehmen.
An einer .dll allein lässt sich die Rolle nicht ablesen, eine .ocx riecht dagegen stark nach einem Steuerelement.
Missverständnis 5: COM ist eine tote Technologie
Zumindest in der Windows-Welt ist diese Aussage zu grob. Sie ist nur von der großen Bühne abgetreten und taucht im Design- und Interop-Kontext bis heute auf.
12. Checkpoints für die Recherche
Findet man COM/ActiveX/OCX, hilft es, der Reihe nach diese Punkte zu prüfen, um nicht die Orientierung zu verlieren.
- Um welches Bauteil handelt es sich?
- Ein UI-Steuerelement?
- Ein Viewer?
- Gerätekopplung?
- Office-/Access-Integration?
- Wo läuft es?
- Access/VBA?
- VB6/MFC?
- WinForms?
- IE/IE-Modus?
- Welche Datei und welche Bezeichner gibt es?
.ocx/.dll/.exe- ProgID
- CLSID
- Typbibliothek
- Wie sind Registrierung und Verteilung geregelt?
- Ist
regsvr32erforderlich? - Gibt es abhängige DLLs?
- Sind Administratorrechte nötig?
- Ist
- Stimmt die Bitness?
- 32 Bit?
- 64 Bit?
- Muss es im selben Prozess laufen?
- Wie soll damit künftig umgegangen werden?
- So belassen?
- Eine Grenze ziehen und kapseln?
- Ersetzen?
12.1. Womit man das recherchiert
Die sechs Punkte oben sagen, „worauf man achtet“; ergänzend sei aufgeführt, „wo man dafür hinschaut“. Ohne das bleibt man auch mit Checkliste schon beim ersten Schritt stecken.
| Was Sie herausfinden möchten | Werkzeug bzw. Ort, an dem Sie nachsehen |
|---|---|
Ob diese .dll/.ocx ein selbstregistrierender COM-Server ist |
Mit dem in Visual Studio enthaltenen dumpbin /exports Dateiname: Wird DllRegisterServer exportiert, handelt es sich um einen selbstregistrierenden COM-Server. regsvr32 ruft genau diese Funktion auf |
| Vorgehen bei Registrierung und Deregistrierung | regsvr32 Dateiname registriert, regsvr32 /u Dateiname deregistriert. Es sind Administratorrechte nötig. Unter 64-Bit-Windows ist %SystemRoot%\System32\regsvr32.exe für 64 Bit und %SystemRoot%\SysWOW64\regsvr32.exe für 32 Bit zuständig – die Wahl richtet sich nach der Bitness des Bauteils |
| Die physische Datei anhand der CLSID nachschlagen | Der Standardwert von HKEY_CLASSES_ROOT\CLSID\{CLSID}\InprocServer32 in der Registrierung ist der Pfad des Inprozess-Servers (DLL/OCX). Bei einem Out-of-Prozess-Bauteil schaut man stattdessen bei LocalServer32 nach |
| Die CLSID anhand der ProgID nachschlagen | Der Standardwert von HKEY_CLASSES_ROOT\ProgID-Name\CLSID ist die CLSID. Umgekehrt lässt sich von der CLSID aus auch der Unterschlüssel ProgID einsehen |
| Registrierungsort von 32-Bit-Bauteilen | Unter 64-Bit-Windows landet die Registrierung für 32-Bit-Bauteile unter HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID. Man sollte nicht nur auf der 64-Bit-Seite nachsehen und daraus schließen, „es ist nicht registriert“ |
| Die veröffentlichten Interfaces auflisten | Ist der im Windows SDK enthaltene OLE/COM Object Viewer (oleview.exe) vorhanden, lassen sich registrierte Klassen und die Typbibliothek auflisten. Je nach SDK-Version ist er nicht enthalten – fehlt er, hilft die Registrierung sowie die Verweiseinstellungen der Entwicklungsumgebung weiter |
| Bitness auf der Host-Seite | Im Task-Manager auf dem Reiter „Details“ lässt sich per Rechtsklick auf die Spaltenüberschrift die Spalte „Plattform“ hinzufügen; damit sieht man je Prozess, ob er 32 Bit oder 64 Bit ist. Eine 32-Bit-OCX lässt sich nicht direkt in einen 64-Bit-Prozess laden |
| Fehlgeschlagene Auflösung von Registrierung oder abhängigen DLLs | Verfolgt man mit Process Monitor die Zugriffe auf Registrierung und Dateien, sieht man, welchen Schlüssel oder welche DLL die Suche nicht fand. Die Bedienung ist im „Process Monitor (ProcMon) Praxisleitfaden“ zusammengefasst |
Ohne diese Punkte anzusehen mit Hier ist ActiveX, also implementieren wir alles neu loszulegen, tappt man sauber in die alten Fallen.
Es ist sicherer, zuerst die sechs Punkte oben und die passenden Werkzeuge abzuarbeiten und danach in Kapitel 10 zwischen „Behalten / Kapseln / Ersetzen“ zu entscheiden.
13. Zusammenfassung
Den Unterschied zwischen COM/ActiveX/OCX am gröbsten, aber praktisch nützlichsten Satz zusammengefasst:
- COM ist das Fundament
- ActiveX ist der Kontext COM-basierter, eingebetteter Bauteile
- OCX ist die Datei, die man bei ActiveX-Steuerelementen häufig sieht
Kann man diese drei auseinanderhalten, wird deutlich klarer,
- ob es sich um eine bloße
.ocxhandelt - ob es ein COM-weites Problem ist
- ob es browserabhängiges ActiveX ist
- ob es ein Bauteil ist, das auf dem Desktop bleiben kann
Legacy-Technologie ist nicht deshalb schwierig, weil die Namen alt sind, sondern weil Fundament, Bauteil und Datei im selben Gespräch auftauchen. Wird die Struktur aber sichtbar, entpuppt sich das Problem als überraschend handhabbar.
14. Quellen
- Was ist COM? – Warum das Design von Windows COM auch heute noch schön ist
- ActiveX / OCX heute behandeln - Entscheidungstabelle: Behalten, Kapseln, Ersetzen
- Component Object Model (COM) - Microsoft Learn
- ActiveX-Steuerelemente - Win32-Apps - Microsoft Learn
- ActiveX Controls - MFC - Microsoft Learn
- ActiveX Control - Access VBA - Microsoft Learn
- Was ist der Internet Explorer (IE)-Modus? - Microsoft Learn
- Häufig gestellte Fragen zum Lebenszyklus von IE und Edge - Microsoft Learn (Richtlinie, den IE-Modus mindestens bis 2029 zu unterstützen)
- regsvr32 - Windows-Befehle - Microsoft Learn
- CLSID-Schlüssel - Win32-Apps - Microsoft Learn
- Registrierungs-Umleitung - Win32-Apps - Microsoft Learn
- Verwenden von DevTools im Internet Explorer-Modus (IE-Modus) - Microsoft Learn
Verwandte Artikel
Aktuelle Artikel mit denselben Schlagwörtern führen zu verwandten Themen weiter.
Registrierungs- und Bitness-Fallen bei der COM/OCX/ActiveX-Entwicklung
Wir ordnen die typischen Fallen der COM-, OCX- und ActiveX-Entwicklung – 32bit/64bit, Visual Studio 2022, regsvr32/Regasm, Administratorr...
ActiveX / OCX heute behandeln - Entscheidungstabelle: Behalten, Kapseln, Ersetzen
Wenn Sie ActiveX / OCX vorfinden, ordnet dieser Artikel ein, ob Sie es behalten, kapseln oder ersetzen sollten - einschließlich 32-Bit/64...
Windows-App-Outsourcing und Auftragsentwicklung: Was Sie vor der Beauftragung klären sollten
Bevor Sie die Entwicklung einer Windows-App outsourcen oder in Auftrag geben, sollten Sie folgende Punkte klären: Überarbeitung bestehend...
Die seltsame Liebe eines Entwicklers, oder: Wie ich lernte, mir keine Sorgen mehr zu machen, und Windows lieben lernte
Windows ist umständlich. Aber diese Umständlichkeit ist auch die Umständlichkeit eines Betriebssystems, das jahrzehntelang reale Geschäft...
Was ist Reg-Free COM - COM ohne Registrierung nutzen
Wir ordnen die Grundlagen von Reg-Free COM, die Rolle von Aktivierungskontext und Manifesten, die Vorteile, die Grenzen und die Entscheid...
Verwandte Themen
Diese Seiten ordnen den Artikel in einen größeren Leistungs- und Entscheidungskontext ein.
Technische Windows-Themen
Portal zu Windows-Entwicklung, Fehleranalyse und der Nutzung bestehender Assets.
ActiveX-Migration
Entscheidungen zum Beibehalten, Kapseln oder Ersetzen von COM / ActiveX / OCX.
Leistungen zu diesem Thema
Dieser Artikel ist direkt mit den folgenden Leistungen verbunden.
Nutzung und Migration bestehender Assets
Die Unterschiede zwischen COM / ActiveX / OCX zu klären, ist ein guter Einstieg, um zu überlegen, wie sich bestehende Bestände weiter nutzen und migrieren lassen.
Technische Beratung und Design-Review
Wenn Sie zuerst Begriffe und Grenzen abstimmen möchten, bevor Sie die Richtung festlegen, lässt sich das als technische Beratung und Design-Review strukturieren.
Häufige Fragen
Fragen, die in Beratungen zu diesem Artikelthema häufig gestellt werden.
- Was ist eine OCX-Datei?
- OCX ist eine Dateiendung, die häufig für die Implementierung von ActiveX-Steuerelementen verwendet wird. Finden Sie in der Windows-Praxis eine .ocx, sollten Sie zunächst ein eingebettetes, steuerelementartiges COM-Bauteil vermuten. Sie taucht häufig als Auslieferung eines Hersteller-SDKs, in alten VB6-/Access-/MFC-Projekten, als Registrierungsziel in einem Installationsprogramm oder als Bauteil auf, das regsvr32 benötigt. Wenn Sie sich merken, dass OCX ein Dateiformat und kein Konzept an sich ist, verwirrt das weniger.
- Was ist der Unterschied zwischen COM und ActiveX?
- COM ist der binäre Vertrag, über den Komponenten unter Windows miteinander kommunizieren – also das Fundament. ActiveX ist ein auf COM aufbauendes, wiederverwendbares Softwarebauteil und bezeichnet vor allem den Kontext von Steuerelementen, die in einen Host oder Container eingebettet werden. Eine hilfreiche Faustregel: „COM = Mechanismus, ActiveX = Bauteil-Kontext, OCX = Datei.“ Das Fundament von ActiveX ist COM, aber ActiveX ist nicht COM selbst.
- Ist ActiveX eine reine Internet-Explorer-Technologie?
- Nein. Dass ActiveX durch den IE bekannt wurde, stimmt zwar, aber ActiveX-Steuerelemente sind eine Bauteil-Technologie, die auch auf der Windows-Anwendungsseite lange verwendet wurde – in Access-Formularen, VB6-Anwendungen, MFC-Containern, rund um Office/VBA und als COM-Wrapper aus WinForms heraus. Es passt in der Praxis besser, ActiveX nicht als reine Browser-Technologie, sondern als eingebettete Bauteil-Technologie von Windows zu betrachten. Bei der browserseitigen ActiveX-Abhängigkeit ist es heute realistischer, sich zu fragen, wo man sie ablöst, statt wie man sie am Leben erhält.
- Wie unterscheiden sich OCX und DLL?
- .ocx ist eine Dateiendung, die recht deutlich auf ein ActiveX-Steuerelement hindeutet, während .dll eine gewöhnliche Bibliothek, ein COM-Server oder eine abhängige DLL rund um ActiveX sein kann. In der Praxis ist es üblich, dass vendorcontrol.ocx die Hauptrolle spielt und DLLs wie vendorhelper.dll unterstützend zur Seite stehen. Fragt man, ob OCX eine Art DLL ist, liegt das gefühlt nahe – bei Recherche und Migration ist es aber sicherer, die Rollen getrennt zu betrachten.
Autorenprofil
Profilseite des Artikelautors.
Go Komura
Geschäftsführer von KomuraSoft LLC
Spezialisiert auf Windows-Softwareentwicklung, technische Beratung und Fehleranalyse, insbesondere bei bestehenden Systemen und schwer reproduzierbaren Störungen.