Seite 1 von 1
Purebasic 3.94, FTP Fehler auslesen
Verfasst: 06.02.2008 10:01
von manibaerchen
Hallo Zusammen,
ich habe ein Programm mit Purebasic 3.94 geschrieben, da
dies schon sehr oft im Einsatz ist, ist ein Umstieg auf 4 derzeit nicht
möglich.
Aber hier meine Frage, das Program arbeitet mit FTP
also z.B: FtpSetCurrentDirectory_ etc und
ich bekomme bei z.b. dieser Funktion teilweise "FALSE" zurück.
D.h. es geht nicht.
Gibt es eine Möglichkeit den realen Fehler, den man hier bekommt
irgendwie auszulesen ?????
Danke
Mani
Re: Purebasic 3.94, FTP Fehler auslesen
Verfasst: 06.02.2008 10:08
von Kiffi
manibaerchen hat geschrieben:D.h. es geht nicht.
da wäre ich mir nicht so sicher. Viele API-Funktionen liefern eine 0 zurück,
wenn alles geklappt hat. Hierfür gibt's auch eine Konstante: #S_OK
Grüße ... Kiffi
Verfasst: 06.02.2008 17:45
von Shardik
API-Fragen lassen sich am besten klären, indem man in Google den Namen der API-Funktion (FtpSetCurrentDirectory) eingibt und in der Fundliste dann den entsprechenden Microsoft-Link anklickt:
MSDN hat geschrieben:ReturnValue
Returns TRUE if successful, or FALSE otherwise. To get a specific error message, call GetLastError. If the error message indicates that the FTP server denied the request to change a directory, use InternetGetLastResponseInfo to determine why.
Und mit dieser Prozedur ermittle ich in meinem FTP-Programm die Windows API-Fehlermeldung:
Code: Alles auswählen
Procedure.S GetWinAPIErrorMsg()
ErrorCode.L
ErrorMsg.S
ErrorMsgBuffer.S
ErrorMsgLength.L
ModuleHandle.L
ErrorCode = GetLastError_()
If ErrorCode = 0
ProcedureReturn #CR$ + #CR$ + "Der Windows-Aufruf GetLastError() lieferte keinen Fehlercode!"
EndIf
If ErrorCode = #ERROR_INTERNET_EXTENDED_ERROR
InternetGetLastResponseInfo_(@ErrorCode, 0, @ErrorMsgLength)
; ----- Achtung! ErrorCode wurde durch InternetGetLastResponseInfo() auf
; Null gesetzt und muß wieder restauriert werden!
ErrorCode = #ERROR_INTERNET_EXTENDED_ERROR
If ErrorMsgLength= 0
ProcedureReturn #CR$ + #CR$ + "Die Ermittlung der Puffergröße beim Windows-Aufruf InternetGetLastResponseInfo() ist gescheitert!"
EndIf
ErrorMsgBuffer = Space(ErrorMsgLength + 1)
Else
ErrorMsgBuffer = Space(255)
ErrorMsgLength = Len(ErrorMsgBuffer) - 1
EndIf
If ErrorCode = #ERROR_INTERNET_EXTENDED_ERROR Or ErrorCode = #ERROR_INVALID_WINDOW_HANDLE
If InternetGetLastResponseInfo_(@ErrorCode, @ErrorMsgBuffer, @ErrorMsgLength) = #False
ProcedureReturn #CR$ + #CR$ + "Die Abfrage der Fehlerbeschreibung beim Windows-Aufruf InternetGetLastResponseInfo() ist gescheitert!"
Else
If ErrorMsgLength > 0
ErrorMsg = "FTP-Log:" + #CR$ + Left(ErrorMsgBuffer, ErrorMsgLength)
Else
ProcedureReturn #CR$ + #CR$ + "Der Windows-Aufruf InternetGetLastResponseInfo() gab keinen Fehlertext zurück!"
EndIf
EndIf
ElseIf ErrorCode >= 12000 And ErrorCode <= 12174
ModuleHandle = GetModuleHandle_("WinInet.DLL")
If ModuleHandle = 0
ProcedureReturn #CR$ + #CR$ + "Der Windows-Aufruf GetModuleHandle() für die Windows-Bibliothek WinInet.DLL ist fehlgeschlagen!"
EndIf
ErrorMsgLength = FormatMessage_(#FORMAT_MESSAGE_FROM_HMODULE, ModuleHandle, ErrorCode, GetUserDefaultLangID_(), @ErrorMsgBuffer, @Len(ErrorMsgBuffer), 0)
Else
ErrorMsgLength = FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM | #FORMAT_MESSAGE_IGNORE_INSERTS | #FORMAT_MESSAGE_MAX_WIDTH_MASK, 0, ErrorCode, GetUserDefaultLangID_(), @ErrorMsgBuffer, @Len(ErrorMsgBuffer), 0)
EndIf
If ErrorMsgLength = 0
ErrorMsg = "Windows-Fehlernummer von GetLastError(): " + Str(ErrorCode) + #CR$ + "Die Textumsetzung der Fehlermeldung mit FormatMessage() ist gescheitert!"
Else
If Left(ErrorMsg, 8) <> "FTP-Log:"
ErrorMsg = "Windows-Fehlernummer von GetLastError(): " + Str(ErrorCode) + #CR$ + "Windows-Fehlermeldung: " + Left(ErrorMsgBuffer, ErrorMsgLength)
EndIf
EndIf
ProcedureReturn #CR$ + #CR$ + ErrorMsg
EndProcedure