martin wrote:
Sorry, I do not understand. Is the problem resolved or not?
Bonjour, Martin
non, le problème n'est pas résolu. J'ai toujours une erreur lors de l'appel de Open() : ole_winscp.Open(ole_sessionOptions)
Le timeout est de 5 secondes, après ça il plante avec le message "Error calling external object function open".
C'est comme s'il attendait quelque chose et qu'il ne reçoit rien ...
Aucune trace sur le serveur.
Je tourne en rond car je n'ai aucune piste à creuser.
Si tu as du temps ...
Merci à toi
Code source :
// Sources :
//
https://winscp.net/
OLEObject ole_winscp
integer li_rc
// RAZ des indicateurs
cbx_winscpsession.Checked = FALSE
cbx_sessionsoptions.Checked = FALSE
cbx_port.Checked = FALSE
cbx_open.Checked = FALSE
cbx_opttrsf.Checked = FALSE
cbx_getfile.Checked = FALSE
// Créer l'objet COM
cbx_winscpsession.ThirdState = TRUE
ole_winscp = create OLEObject
IF ole_winscp.ConnectToNewObject("WinSCP.Session") <> 0 THEN
MessageBox("Erreur ConnectToNewObject()", "Impossible de créer un objet COM [WinSCP.Session]")
RETURN
END IF
cbx_winscpsession.Checked = TRUE
//===> C'est OK
// Initialiser les options de session
cbx_sessionsoptions.ThirdState = TRUE
OLEObject ole_sessionOptions
ole_sessionOptions = create OLEObject
IF ole_sessionOptions.ConnectToNewObject("WinSCP.SessionOptions") <> 0 THEN
MessageBox("Erreur ConnectToNewObject()", "Impossible de créer un objet COM [WinSCP.SessionOptions]")
RETURN
END IF
cbx_sessionsoptions.Checked = TRUE
//===> C'est OK
// Ouverture de la session
cbx_open.ThirdState = TRUE
ole_sessionOptions.Protocol = 2 // 2 = SFTP
//ole_sessionOptions.FtpMode = 1
ole_sessionOptions.HostName = sle_ip.Text
IF Integer(sle_port.Text) > 0 THEN
ole_sessionOptions.PortNumber = Integer(sle_port.Text)
cbx_port.Checked = TRUE
END IF
ole_sessionOptions.UserName = sle_user.Text
ole_sessionOptions.Password = sle_mdp.Text
ole_sessionOptions.TimeoutInMilliseconds = 5000
// N'existe pas ole_sessionOptions.XmlLogPath = "C:\\avirer\vmasftplog.xml"
IF
ole_winscp.Open(ole_sessionOptions) <> 0 THEN
MessageBox("Erreur Open()", "Impossible d'ouvrir une session")
RETURN
END IF
cbx_open.Checked = TRUE
// Télécharger un fichier
cbx_opttrsf.ThirdState = TRUE
OLEObject ole_transferOptions
ole_transferOptions = create OLEObject
IF ole_transferOptions.ConnectToNewObject("WinSCP.TransferOptions") <> 0 THEN
MessageBox("Erreur ConnectToNewObject()", "Impossible de définir les options de transfert [WinSCP.TransferOptions]")
RETURN
END IF
cbx_opttrsf.Checked = TRUE
// Récupération du fichier
cbx_getfile.ThirdState = TRUE
OLEObject ole_transferResult
FileDelete(sle_local.Text)
ole_transferResult = ole_winscp.GetFiles(sle_distant.Text, sle_local.Text, False, ole_transferOptions)
IF FileExists(sle_local.Text) = FALSE THEN
MessageBox("Erreur de transfert", "Le fichier ["+sle_local.text+" n'est pas présent")
RETURN
END IF
cbx_getfile.Checked = TRUE
// Vérifier le résultat du transfert
ole_transferResult.Check()
// Fermer la session
ole_winscp.Close()
// Libérer les objets COM
destroy ole_transferOptions
destroy ole_sessionOptions
destroy ole_winscp