Prüfen ob Funktion in Dll existiert / vorhanden ist
Veröffentlicht am 29.08.2008 von Sebastian Krogolewski
Es gibt unmnegen an Dll Dateien in den verschiedensten Versionen. Bei den Versionswechseln kann es nun passieren das Funktionen wegfallen und als Folge davon funktioniert die Software nicht mehr. Mit der Win API und den Funktionen LoadLibraryA bzw. LoadLibraryW als LoadLibrary, GetProcAddress und FreeLibrary aus der Kernel32.Dll kann man dem Problem entgegen wirken.
1. Die Dll mit LoadLibrary laden.
2. Die Funktion aus der Dll mit GetProcAddress laden.
3. Die Dll mit FreeLibrary wieder freigeben.
Einbinden der benötigten API Funktionen LoadLibrary, GetProcAddress und FreeLibrary aus der Kernel32.Dll:
1
2
3
4
56
7
8
| Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" ( _ ByVal LibraryFileName As String) As Long Private Declare Function GetProcAddress Lib "kernel32" ( _ ByVal hModule As Long, ByVal FunctionName As String) As Long Private Declare Function FreeLibrary Lib "kernel32" ( _ ByVal hLibModule As Long) As Long |
1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 | Public Function DLLFunctionExists(ByVal DllName As String, ByVal FunctionName As String) As Boolean Dim hModule As Long Dim lProcAddress As Long 'Bibliothek LadenhModule = LoadLibrary(DllName) 'Prüfen ob die Bibilothek geladen werden konnte If (hModule <> 0) Then 'Wenn die Bibliothek geladen wurde, dann die Adresse der Funktion ermitteln lProcAddress = GetProcAddress(hModule, FunctionName) 'Bibliothek wieder freigeben FreeLibrary hModule 'Wenn Funktion vorhanden dann ist lProcAddress <> 0: DllFunctionExists = CBool(lProcAddress) End If End Function |
DLLFunctionExists erwartet 2 Parameter:
DllName: Pfad + Dateiname der Dll Datei.
FunctionName: Name der Funktion welche geprüft werden soll.
Rückgabewert:
True: Funktion ist vorhanden / existiert.
False: Funktion ist nicht vorhanden / existiert nicht oder die Dll Datei konnte nicht gefunden werden.






