ActiveX-DLLs
von Elmar Steinböck
Übersicht
In diesem Tutorial werden die Grundbegriffe von ActiveX-DLLs erklärt. Der Lehrgang ist für Einsteiger gedacht und beinhaltet die Grundzüge sowie ein kleines Beispiel.
Mit freundlichen Grüßen
Elmar Steinböck Elmar@ActiveVB.de
Allgemeines
DLLs (Dynamic Link Libraries) sind Laufzeitbibliotheken für Ihr Programm. Mit Visual Basic können Sie sogenannte Active-X-DLLs erzeugen. Active-X-DLLs sind In-Process-Server (im Gegensatz zu EXE = Out-Process-Server), die im Speicherbereich der aufrufenden Anwendung ausgeführt werden.
Die Prozeduren und Funktionen einer Active-X-DLL stellen die Methoden einer Klasse dar. Eigenschaften können Sie wie bei Active-X-Steuerelementen als Property-Prozeduren erstellen.
Üblicherweise werden in einer DLL nur Funktionen und Eigenschaften verarbeitet - aber Sie können auch Formulare in eine DLL einfügen und diese anzeigen.
Grundlagen
Um eine DLL zu erstellen, müssen Sie über Datei / Neu ein Active-X-DLL-Projekt erzeugen. Das Projekt hat üblicherweise den Namen "Project1"; enthalten ist bereits ein Klassenmodul mit dem Namen "Class1".
Vergeben Sie eindeutige Namen für das Projekt und für die Klassenmodule ! Unter Projekt - Verweise ist die Projektbeschreibung der DLL zu finden.
Abbildung 1: Neues Projekt ActiveX-DLL
Ich beziehe mich im folgenden auf das Beispiel, welches Sie im Anhang zu diesem Tutorial finden. Das Projekt hat nun den Namen "Atest", das Klassenmodul den Namen "Testing".
Warum die Vergaben von eindeutigen Namen so wichtig ist, liegt auf der Hand. Stellen Sie sich vor, Sie belassen die Vorgaben auf Projekt1 und Class1. Sie würden keine Unterscheidungen mehr treffen können und es werden wahrscheinlich Namenskonflikte in der Visual-Basic-Umgebung auftreten.
Einbindung der DLL
Wenn Sie die ActiveX-DLL kompiliert haben, können Sie diese nun in jedes Ihrer Projekte einbinden. Dazu setzen Sie einen Verweis (Menü Projekt/Verweise oder auch Project/References) auf die DLL (siehe Abbildung):
Abbildung 2: Neues Projekt ActiveX-DLL
Aufruf und Übergabe
Erstellen Sie ein neues Visual-Basic-Projekt (Standard-EXE); Setzen Sie wie oben beschrieben, den Verweis auf Ihre DLL. Diese sollte sich entweder im System-Verzeichnis oder im Pfad Ihrer Anwendung befinden.
Mit den folgenden CodeZeilen können Sie die Eigenschaften und Methoden der DLL über die Instanzierung der entsprechenden Klasse aufrufen:
Dim VariablenName As New KlassenName
oder auch
Set VariablenName = CreateObject("DLLName.Klassenname")
Im Beispiel wäre das:
Dim X As New Testing
oder auch
Set X = CreateObject("atest.Testing")
Nun können Sie alle als Public deklarierten Prozeduren, Eigenschaften und Funktionen aufrufen:
Msgbox X.TotalerSpeicher
Beispiel-DLL
Unser kleines Beispiel kommt mit sehr wenigen Zeilen aus:
In dieser DLL wird der totale und der verfügbare Arbeitsspeicher ausgelesen und im Projekt aufgerufen bzw. angezeigt. Zuständig sind die Eigenschaften Property Get VariablenName()
Private Type MemoryStatus dwLength As Long dwMemoryLoad As Long dwTotalPhys As Long dwAvailPhys As Long dwTotalPageFile As Long dwAvailPageFile As Long dwTotalVirtual As Long dwAvailVirtual As Long End Type Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MemoryStatus) Public Property Get TotalerSpeicher() As String Dim yourmemory As MemoryStatus yourmemory.dwLength = Len(yourmemory) GlobalMemoryStatus yourmemory TotalerSpeicher = (yourmemory.dwTotalPhys / 1024) End Property
Ausserdem finden Sie noch einige andere kleine Funktionen, die jedoch nur Testcharakter haben.
Instanzierung
Mit der Eigenschaft Instancing entscheiden Sie, ob und wie die Klasse(n) in anderen Anwendungen verwendet werden:
Abbildung 3: Neues Projekt ActiveX-DLL
Private:
Es ist kein Zugriff möglich und die Klasse ist in der Anwendung nicht sichtbar.
PublicNotCreatable:
Es ist prinzipiell kein Zugriff möglich, das Erstellen ist ausschließlich dem Server vorbehalten. Jedoch kann von einer anderen Klasse, die auf 6 - GlobalMultiUse gesetzt ist, eine Referenz übergeben werden.
Multiuse:
Das ist die Voreinstellung für ActiveX-DLLs; Sie müssen eine Instanz der Klasse erzeugen (Dim Klasse As New KlassenName oder Set Klasse = CreateObject....).
GlobalMultiUse:
Hier müssen Sie nicht extra eine Instanz erzeugen. Der Aufruf erfolgt nun so: KlassenName.Eigenschaft (in unserem Beispiel: Testing.Totalerspeicher)
Eigenschaften - Properties
Im Beispiel arbeiten wir mit Properties (Property Get TotalerSpeicher). Es handelt sich hier um eine Rückgabefunktion, Property Let wäre im Gegensatz dazu die Zuweisung einer Eigenschaft - die wir jedoch in diesem Beispiel nicht gebrauchen können...
Wenn Sie die Eigenschaft Property auf Private setzen, hat sie nur Gültigkeit innerhalb der Klasse. Setzen Sie daher die Eigenschaft auf Public, um sie in Ihrem Projekt einsetzen zu können.
Methoden und Funktionen
Was als Methode bezeichnet wird, ist eigentlich eine Funktion oder eine Prozedur (als Public deklariert !). Damit können Sie Werte übergeben und zurückgeben. Die Programmierung ist im Prinzip die gleiche wie in einer "normalen" EXE auch.
Public Sub ShowMessage (Name As String) MsgBox Name End Sub
Aufgerufen wird in Ihrem Formular (EXE) so:
Dim X As New Testing X.ShowMessage "Hallo, da bin ich"
Ein weiteres Beispiel für eine Funktion, die eine Summe aus den übergebenen Werten bildet:
Public Function Summe(ParamArray Ziffern() As Variant) As String Dim Sum As Single Dim i As Integer For i = 0 To UBound(Ziffern) Sum = Sum + Ziffern(i) Next 'i Summe = CStr(Sum) End Function
Aufruf:
Dim X As New Testing Text1.Text = X.Summe(23,14,889)
Ereignisse
Seit der Version 5.0 gibt es die Möglichkeit, Ereignisse für Klassen zu erstellen. Die Definition der Ereignisse ist einfach - Geben Sie im Prozedurkopf der Klasse das gewünschte Ereignis an:
Public Event Testen ()
Mit RaiseEvent Testen wird das Ereignis ausgelöst.
Public Event TestEreignis() Public Sub EreignisTesten() MsgBox "Das Ereignis 'TestEreignis' wurde ausgelöst!" RaiseEvent TestEreignis 'Das Ereignis wird ausgelöst ! End Sub
Der Aufruf in der EXE (Formular) erfolgt so:
Private WithEvents Test1 As Testing
Es wird also eine neue Instanz erzeugt, allerdings muss dies noch im Ereignis Form_Load geschehen:
Sub Form_Load() Set Test1 = New Testing End Sub
Plötzlich haben Sie im Visual Basic-Menü (linke obere Combobox) Zugriff auf das Ereignis test1 / Testereignis - Und genau dorthin kommt der Code
Private Sub test1_TestEreignis() Me.BackColor = vbBlack Me.Caption = "JETZT IST ALLES SCHWARZ" End Sub
Aufgerufen wird dieses Ereignis mit einem CommandButton:
Call Test1.Ereignistesten
Zusammenfassung und Beispiel
Das vorliegende Tutorial sollte nur als Einstiegshilfe für Anfänger gedacht sein. Es sollte zeigen, wie Sie eine einfache DLL erstellen und diese in Ihr Projekt einbinden. Der Vorteil einer eigenen DLL liegt klar auf der Hand: Sie brauchen umfangreiche Funktionen, Subs und Eigenschaften nicht bei jedem Projekt neu zu schreiben oder einzufügen.
Sie erstellen eine Active-X-DLL mit den gewünschten Ereignissen und greifen dann aus Ihrem Projekt heraus zu. Sinnvolle Beispiele für eigene DLLs wären Komponenten für Systemeigenschaften wie Arbeitsspeicher und Registry-Werte oder umfangreiche Funktionen für Grafikbearbeitungen. Auch immer wieder gebrauchte Algorithmen können Sie in DLLs verpacken.
Beispielprojekt [12288 Bytes]
Ihre Meinung
Falls Sie Fragen zu diesem Tutorial haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.