Purebasic 3.94, FTP Fehler auslesen

Anfängerfragen zum Programmieren mit PureBasic.
manibaerchen
Beiträge: 32
Registriert: 27.11.2005 12:32
Wohnort: Bad Endorf
Kontaktdaten:

Purebasic 3.94, FTP Fehler auslesen

Beitrag 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
Geht nicht, Gibts nicht
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Purebasic 3.94, FTP Fehler auslesen

Beitrag 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
a²+b²=mc²
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag 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: :roll:
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
Antworten