Rubrik: COM/OLE/Registry/DLL · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 28.11.03 |
Funktion in einer DLL vorhanden? Diesmal zeigen wir, wie sich prüfen lässt, ob eine DLL eine bestimmte Funktion enthält oder nicht. | ||
Autor: Dieter Otter | Bewertung: | Views: 15.869 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Vor kurzem haben wir Ihnen gezeigt, wie sich prüfen lässt, ob eine bestimmte DLL vorhanden ist und ob es sich bei der DLL um eine Standard-DLL oder eine ActiveX-DLL handelt. Siehe hierzu auch: Prüfen ob DLL vorhanden und DLL-Typ ermitteln
Wenn Sie sich diesen Tipp einmal ganz genau ansehen, dann entdecken Sie, dass man hiermit ebenfalls prüfen kann, ob eine bestimmte Funktion in der DLL vorhanden ist oder nicht (siehe Prüfung, ob es sich um eine ActiveX-DLL handelt).
Nachfolgende Funktion baut auf oben genannten Tipp auf und prüft die Verfügbarkeit einer DLL-Funktion.
Option Explicit ' Benötrite API-Deklarationen 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 Private Declare Function GetProcAddress Lib "kernel32" ( _ ByVal hModule As Long, _ ByVal lpProcName As String) As Long
' Funktion in DLL vorhanden? Public Function DLLFunctionAvail(ByVal sFile As String, _ ByVal sProcedure As String) As Boolean Dim nHandle As Long ' DLL laden nHandle = LoadLibrary(sFile) If nHandle <> 0 Then ' Versuch die Adresse der Funktion zu ermitteln If CBool(GetProcAddress(nHandle, sProcedure)) = True Then ' Jepp: Funktion vorhanden DLLFunctionAvail = True End If ' Speicher wieder freigeben Call FreeLibrary(nHandle) End If End Function
Die Funktion DLLFunctionAvail erwartet als ersten Parameter den Namen der DLL-Datei. Wird kein Pfad angegeben, wird in den Systempfaden nach der DLL gesucht. Als zweiten Parameter wird der Name der Funktion/Prozedur erwartet. Existiert die Prozedur wird TRUE zurückgegeben, andernfalls FALSE.
HINWEIS:
Bei der Angabe der zu prüfenden Funktion/Prozedur ist auf exakte Groß-/Kleinschreibung zu achten!
Beispiel:
Die Funktion SetLayeredWindowAttributes aus der User32.dll steht erst ab Windows 2000 oder höher zur Verfügung. Wenn Sie diese Funktion in Ihrer Anwendung verwenden können Sie entweder das Betriebssystem abfragen oder ab sofort auch direkt die Verfügbarkeit der Funktion prüfen.' Prüfen, ob die Funktion "SetLayeredWindowAttributes" ' zur Verfügung steht If DLLFunctionAvail("user32", "SetLayeredWindowAttributes") Then ... End If