Die Community zu .NET und Classic VB.
Menü

ActiveX-DLLs

 von 

Ü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

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.