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 02.05.2001

Diese Seite wurde zuletzt aktualisiert am 02.05.2001
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...

DLL verfügbar?

Zurück...


Anzeige

(-hg) mailto:hg_isdllavailable@aboutvb.de

Wenn Ihre Anwendung eine bestimmte Standard-DLL verwenden soll, deren Funktionen Sie als DLL-Funktionen ("Declare Sub/Funktion...") deklariert haben, können Sie sich natürlich darauf verlassen, dass sich Visual Basic mit einem Laufzeitfehler bemerkbar macht, falls diese DLL nicht gefunden werden sollte. Allerdings prüft Visual Basic das Vorhandensein einer DLL nicht global gleich beim Programmstart, sondern erst bei der ersten Verwendung einer (deklarierten) Funktion dieser DLL.

Allerdings könnte sich Ihre Anwendung jedoch zu diesem Zeitpunkt in einem kritischen Zustand befinden, der trotz abfangbarem Laufzeitfehler nicht so einfach ohne Integritätsprobleme oder Seiteneffekte abzuwickeln wäre. Daher wäre es sinnvoll, die Verfügbarkeit einer DLL gleich beim Programmstart zu prüfen und die Anwendung beim Fehlen der DLL entweder abzubrechen, oder die kritischen Bereiche, in denen die DLL-Funktionen verwendet werden, zu sperren.

Zur Prüfung nutzen Sie die Möglichkeit, eine DLL mit der API-Funktion MSDN-Library - API LoadLibraryLoadLibrary unter Angabe ihres Dateipfades explizit zu laden (auch wenn Sie damit ansonsten in Visual Basic anfangen können). Ist der Ladeversuch erfolglos, gibt sie 0 zurück. Anderenfalls gibt sie ein Modul-Handle zurück, das sie anschließend mit der API-Funktion MSDN-Library - API FreeLibraryFreeLibrary noch entsorgen müssen.

Private Declare Function LoadLibrary Lib "kernel32" _
 Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32" _
 (ByVal hLibModule As Long) As Long

Public Function IsDLLAvailable(DLLPath As String) As Boolean
  Dim nHMod As Long
  
  nHMod = LoadLibrary(DLLPath)
  If nHMod Then
    IsDLLAvailable = True
    FreeLibrary nHMod
  End If
End Function

Natürlich könnten Sie das Vorhandensein einer DLL-Datei auch einfach auf der Ebene des Datei-Systems prüfen. Doch das hätte unter Umständen zuvor etwas Sucharbeit zur Folge, wenn der genaue Pfad nicht bekannt ist. Die API-Funktion LoadLibrary hingegen findet die DLL immerhin auch dann, wenn sie sich im aktuellen Suchpfad befindet (Verzeichnis der Anwendung, DOS-Pfad, speziell einer Anwendung zugeordnete Pfade).

Außerdem stellt sie sicher, dass es sich tatsächlich um eine DLL handelt - es könnte ja sein, dass ein Anwender irgendeine andere Datei darüberkopiert hat. Eine verbesserte Variante der Funktion IsDLLAvailable könnte daher noch das Vorhandensein einer der deklarierten Funktionen prüfen, über die API-Funktion MSDN-Library - API GetProcAddressGetProcAddress:

Private Declare Function LoadLibrary Lib "kernel32" _
 Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" _
 (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32" _
 (ByVal hLibModule As Long) As Long

Public Function IsDLLProcAvailable(DLLPath As String, _
 Optional ProcName As String) As Boolean

  Dim nHMod As Long
  
  nHMod = LoadLibrary(DLLPath)
  If nHMod Then
    If StrPtr(ProcName) Then
      IsDLLProcAvailable = CBool(GetProcAddress(nHMod, ProcName))
    Else
      IsDLLProcAvailable = True
    End If
    FreeLibrary nHMod
  End If
End Function

Modul modIsDLLAvailable (modIsDLLAvailable.bas - ca. 0,8 KB)


Artikel
Zum Download-Bereich dieses 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 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer