Post a reply

Options
Add an Attachment

If you do not want to add an Attachment to your Post, please leave the Fields blank.

(maximum 10 MB; please compress large files; only common media, archive, text and programming file formats are allowed)

Options

Topic review

Vincent

Re: SFTP avec PowerBuilder et WinSCP.DLL

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
martin

Re: SFTP avec PowerBuilder et WinSCP.DLL

Sorry, I do not understand. Is the problem resolved or not?
Vincent

Re: SFTP avec PowerBuilder et WinSCP.DLL

Merci beaucoup.
Effectivement, il faut bien enregistrer avec regasm.
Ensuite, j'ai des soucis mais ça concerne l'appel des API sous PowerBuilder :
. WinSCP.Session => OK
. WinSCP.SessionOption => OK
ole;Open(sessionsoptions) ne fonctionne pas, erreur et sortie de powerbuilder sans message ...
Vincent

SFTP avec PowerBuilder et WinSCP.DLL

Bonjour,
J'utilisais les transferts FTP via WININET.DLL.
Je dois maintenant implémenter des transferts FTP sous PowerBuilder avec WinSCP.
Je souhaite utiliser les API de WinSCP.DLL
J'ai bien récupéré du code mais ça tombe en erreur dés le début.
Extrait du code :
oleobject lo_sessionoptions

lo_sessionoptions = create oleobject
li_return = lo_sessionoptions.ConnectToNewObject("WinSCP.SessionOptions")
IF li_return <> 0 THEN
    messagebox("ConnectToNewObject", "Erreur n° " + string(li_return))
    RETURN
END IF

L'erreur retournée est
-2 -- Class name not found

Merci de votre aide.