ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 29.09.2003

Diese Seite wurde zuletzt aktualisiert am 29.09.2003
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Global oder global?

Zurück...

(-hg) mailto:hg_globalorglobal@aboutvb.de

Wenn Sie in einem ActiveX-Projekt eine öffentliche globale Klasse anlegen (Instancing-Eigenschaft der Klasse = "6 - GlobalMultiUse"), kann der Verwender der Komponente deren Methoden und Eigenschaften wie eingebaute Visual Basic-Funktionen direkt nutzen. Er braucht eine solche Klasse nicht erst ausdrücklich zu instanzieren. Diese Möglichkeit der direkten Nutzung ist vor allem für Hilfs-Funktionen zur Typ-Konvertierung von Objekten und Schnittstellen der Komponente ganz praktisch (siehe beispielsweise "Schnittstellen 'chamäleonieren'"). Oder für Funktionen, die bei der Verwendung der Komponente immer wieder benötigt werden, ohne dass sie einer bestimmten Klasse oder einem bestimmten Objekt der Komponente sinnvoll zuzuordnen wären.

Einen kleinen Haken haben diese globalen Klassen jedoch: Innerhalb des Projekts, in dem sie angelegt sind, sind sie leider nicht global. Um deren Funktionen innerhalb des Projekts zu verwenden, müssten Sie eigentlich eine Instanz anlegen, diese gegebenenfalls einmal einer globalen Objekt-Variablen in einem Standard-Modul zuweisen, um dann immer wieder über diese Objekt-Variable auf die Funktionen zuzugreifen.

Abgesehen davon, dass Sie sich damit einige unnötige Schreibarbeit bereiten, wird auch die Performance der Komponente ein wenig gebremst - vor allem, wenn Sie diese Hilfs-Funktionen häufig bis ausgiebig insbesondere an performance-kritischen Stellen einsetzen.

Die erste Alternative wäre, die Hilfs-Funktionen zusätzlich noch einmal direkt in einem Standard-Modul anzulegen. Das Performance-Problem als auch die zusätzlich Schreibarbeit hätten sich damit erledigt. Der schwerwiegende Nachteil dieser Alternative ist allerdings, dass Sie jedes Mal beide "Standorte" einer Funktion bearbeiten müssen, wenn Sie etwas in deren Code zu ändern haben.

Ehe Sie jedoch diese Alternative vorschnell verwerfen: Drehen Sie den Spieß doch einfach um. Innerhalb des Projekts verwenden Sie bequem und performant (letzteres sowohl beim Codieren als auch zur Laufzeit Ihrer Komponente) die in einem Standard-Modul angelegten Funktionen. Und in der öffentlichen globalen Klasse leiten Sie deren Funktionsaufrufe (eigentlich sind es hier ja Methoden-Aufrufe, da es sich trotz allem um eine Klasse handelt) an die Funktionen im Standard-Modul weiter. Zwar kehren Sie damit auch den Performance-Nachteil um. Doch zum einen schieben Sie den "Schwarzen Peter der Langsamkeit" elegant dem Verwender Ihrer Komponente zu, während Sie in Ihrer Komponente mit Performance glänzen können (nein, so ganz Ernst gemeint ist dieses Argument sicher nicht - aber es hat doch 'was, oder?). Zum anderen: Zwar bleibt der Performance-Verlust absolut gesehen der gleiche - aber verhältnismäßig betrachtet fällt er in Anbetracht des ohnehin bei einem Funktions- bzw. Methoden-Aufruf einer ActiveX-Komponente gegebenen Overheads nicht mehr so sehr arg ins Gewicht, für den Anwender Ihrer Komponente.

Sie könnten natürlich auch Gerechtigkeit walten lassen und Ihre globale(n) Klasse(n) in eine separate ActiveX-DLL auslagern. Damit hätte Sie für Gleichheit bei der Performance sowohl in Ihrer Komponente als auch für den Anwender derselben gesorgt. Doch was hätten Sie davon, außer Mühe bei der Organisation der Verweise innerhalb Ihrer Komponente(n) und den hin und wieder auftretenden Ärger mit der Installation einer zusätzlichen Komponente beim Anwender?


Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2023 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...