Declare Function Declare32 Lib "call32.dll" (ByVal Func As String, ByVal Library As String, ByVal Args As String) As Long Declare Sub FreeCall32IDs Lib "call32.dll" ()
Declare Function GetFileAttributesA Lib "call32.dll" Alias "Call32" (ByVal lpFileName As String, ByVal lngdAdditionalAufrufId As Long) As Long
lngAufrufId = Declare32("GetFileAttributesA", "kernel32", "p")
lngReturnValue = GetFileAttributesA(sDateiname, lngAufrufId)
FreeCall32IDs
Innerhalb einer solchen Routine können die Rückgabewerte der angesprochenen API-Funktionen nach Bedarf verarbeitet werden.
Declare Function Declare32 Lib "call32.dll" (ByVal Func As String, ByVal Library As String, ByVal Args As String) As Long Declare Sub FreeCall32IDs Lib "call32.dll" () Declare Function GetFileAttributesA Lib "call32.dll" Alias "Call32" (ByVal lpFileName As String, ByVal lngdAdditionalAufrufId As Long) As Long
Und hier die Funktion Exists_File32(), die auf eine wiederum gekapselte Funktion GetFileAttributesA_Call32() zurückgreift:
Function Exists_File32 (sFile As String) As Integer
On Error GoTo err_Exists_File32
' **** Beherrscht dank call32 langen Pfad- wie auch Dateinamen. ****
Dim iRet As Integer
If GetFileAttributesA_Call32(sFile) > 0 Then
iRet = True
End If
Exists_File32 = iRet
Exit Function
err_Exists_File32:
Fehler "Exists_File32"
Exit Function
End Function
Das stützt sich leicht mißbrauchend auf die 32-Bit-API-Funktion GetFileAttributes:
Function GetFileAttributesA_Call32 (sFile As String) As Long
On Error GoTo err_GetFileAttributesA_Call32
Dim lngAufrufId As Long
lngAufrufId = Declare32("GetFileAttributesA", "kernel32", "p")
' **** Alle erforderlichen sowie die call32-Aufruf-Id als zusätzlichen Parameter ****
GetFileAttributesA_Call32 = GetFileAttributesA(sFile, lngAufrufId)
exit_GetFileAttributesA_Call32:
FreeCall32IDs ' DLL-Aufruf-Speicher aufräumen
Exit Function
err_GetFileAttributesA_Call32:
Fehler "GetFileAttributesA_Call32"
If Err = 53 Then ' evtl. entspricht das aktuelle Arbeitsverzeichnis
Beep ' nicht dem Anwendungs-Verzeichnis, z.B. bei manuellem Start.
MsgBox "Bitte starten Sie die Anwendung auf die dafür vorgesehene Weise.", 64, "GetFileAttributesA_Call32"
Exit Function
End If
Resume exit_GetFileAttributesA_Call32
End Function