无法连接到FTP服务器。

3

我正在尝试使用Windows API函数通过PowerBuilder应用程序连接到FTP服务器。我已经成功通过Internet Explorer连接到FTP服务器(因此我不认为这是权限问题),但应用程序由于某种未知原因而失败。

String  ls_Null, &
            ls_id
Integer li_rc

li_rc = 1

IF Not InternetAutodial(AUTODIAL_FORCE_UNATTENDED, 0) THEN
    f_write_to_err_log('IMPORT Unable To Connect Internet - Dialup')
    li_rc = -1
ELSE
    SetNull(ls_Null)
    ls_id = "Care_Dsend"
    al_internet_handle = InternetOpen(ls_id, INTERNET_OPEN_TYPE_DIRECT, ls_Null, ls_Null, 0)        

    IF al_internet_handle > 0 THEN
        al_ftp_connect_handle = InternetConnect(al_internet_handle, is_ftp_url, il_ftp_port, is_ftp_user, is_ftp_password, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, al_ref) 
    END IF
END IF

Return li_rc


//al_internet_handle, al_ftp_connect_handle are by ref long parms
//al_ref is a by ref unsignedlong parm
//is_ftp_url, is_ftp_user, is_ftp_password are strings
//il_ftp_port is long

该函数成功调用了InternetOpen API函数并返回一个句柄,但在调用InternetConnect函数时返回0。

有任何想法吗?


我对PowerBuilder一无所知,但是你需要指定代理吗? - Andrew Cooper
不,我不会。正如在另一条评论中提到的那样,这个脚本在几年前编写的另一个应用程序中运行良好,我不明白为什么现在它无法工作。 - Guy
2个回答

2

好的,我找到了问题所在。我的函数声明末尾缺少;Ansi,应该如下:

Function ulong InternetOpen (ref string lpszAgent, ulong dwAccessType, ref string lpszProxy, ref string lpszProxyBypass, ulong dwFlags) Library "WININET.DLL" Alias for "InternetOpenA ;Ansi"

(注:此文中有html标签,请注意保留)

1
很高兴你解决了它。在Pb10中,为了支持Unicode,进行了一些重大的更改-看起来你可能遇到了这个问题:http://www.techno-kitten.com/Changes_to_PowerBuilder/New_in_PowerBuilder_10/PB10New_-_Unicode_Support/PB10New_-_Unicode_Related_Chan/PB10New_-_Calling_External_Fun/pb10new_-_calling_external_fun.html - Colin Pickard

1

你能否发布你的本地外部函数或者你用于InternetAutodial(), InternetOpen()等的代码?这些不是内置函数(至少在我的Powerbuilder 11.2中不是),也不像PFC。另外,你使用的Powerbuilder版本是什么。

或者,你可以查看以下链接:


这里是我正在使用的本地外部函数: Function boolean InternetAutodial (ulong dwFlags,ulong dwReserved) Library "WININET.DLL" Function ulong InternetOpen (ref string lpszAgent, ulong dwAccessType, ref string lpszProxy, ref string lpszProxyBypass, ulong dwFlags) Library "WININET.DLL" Alias for "InternetOpenA" 这些不是内置的PB函数,而是Windows API函数。我正在使用PB 11.5,但在几年前编写的早期版本的PB应用程序中也使用了完全相同的函数,并且该应用程序运行良好。 - Guy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接