今天我调用ftpgetfile这个API,查到的格式如下,但第三参数却不能换成变量,一用就出错,请哪位高人指点一下。小弟会非常感谢
ftpgetfile(hconnection,   "trms_upgrade\xtgl.exe",   "c:\trms\bin\xtgl.exe",   false,   internet_flag_reload,   ftp_transfer_type_binary,   0)  

解决方案 »

  1.   

    自己对照一下吧,声明:
    Public Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _
    (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _
    ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Long, _
    ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean第三个参数是指针(带lp的都是),应该是保存的文件名,不能直接写成字符串,写成字符串哪行啊?
    应该这样定义:dim newFile as string *255
      

  2.   

    我在网上看到过有这样用的,也许能行(听说比WinSock强大得多):1.检查INTERNET是否连通 
    DECLARE Integer InternetGetConnectedState IN "wininet.dll" Integer,Integer
    ? InternetGetConnectedState(0,0)2.自动拨号-使用默认的拨号连接 (IE的INTERNET连接设置里必须设置拨号连接, 另外还有个InternetDial函数,必须使用拨号连接名称)
    DECLARE Integer InternetAutodial IN "wininet.dll" Integer,Integer
    ? InternetAutodial (0,0)3.自动中断拨号或者连接
    DECLARE Integer InternetAutodialHangup IN "wininet.dll" Integer
    ? InternetAutodialHangup(0)4. 获得一个连接句柄
    Declare Integer InternetOpen IN "wininet.dll" String, Integer, String, String, Integer
    lnOpen= internetOpen("MyFtp",1,null,null,0) 5. 连接到FTP SERVER
    Declare Integer InternetConnect in "wininet.dll" Integer,String,Integer,String, String, Integer, Integer, Integer
    lnConn=InternetConnect(lnOpen, "ftp.microsoft.com",0 , "anonymous", "[email protected]", 1, 0, 0)6. 下载一个文件. 还有不少FTP或者HTTP的操作文件或页面的函数. 有兴趣者自己去试
    Declare Integer FtpGetFile in "wininet.dll" Integer, String, String, Integer, Integer,Integer,Integer
    ? FtpGetFile(lnConn,''/bussys/readme.txt'',''c:\Temp\msreadme.txt'',0,0,1,0)7. 中断连接
    Declare Integer InternetCloseHandle In "wininet.dll" Integer
    ? InternetCloseHandle(lnConn)
      

  3.   

    祥情,请参见:   http://hi.baidu.com/pespin/blog/item/cb16e8dc30a232a2cd1166b5.html
      

  4.   

        '这个是我简单写个连接下载过程   一切正常啊..........  
    lnginet = InternetOpen(vbNullString,INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0&) 
        lnginetconn = InternetConnect(lnginet, txtFTP.Text, 0, txtUSER.Text, txtPASSWORD.Text, 1, 0, 0)    blnRC = FtpGetFile(lnginetconn, ServerFolder & lstServer.List(lstIndex), LocalFolder & lstServer.List(lstIndex), 0, 0, 1, 0)   InternetCloseHandle lnginetconn
       InternetCloseHandle lnginet
      

  5.   

    通常是API函数声明问题,将你的声明贴出来。
      

  6.   

    这些是我声明的,我看着也没有问啊Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
    (ByVal sAgent As String, ByVal LAccessType As Long, ByVal sProxyName As String, _
    ByVal SProxyBypass As String, ByVal lFlags As Long) As LongPublic Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
    (ByVal hInternetSession As Long, ByVal sServerName As String, _
    ByVal nServerPort As Integer, ByVal sUsername As String, _
    ByVal sPassword As String, ByVal lService As Long, _
    ByVal lFlags As Long, ByVal lContext As Long) As LongPublic Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _
    (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _
    ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _
    ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _
    ByVal dwContext As Long) As BooleanPublic Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _
    (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _
    ByVal lpszRemoteFile As String, ByVal dwFlags As Long, _
    ByVal dwContext As Long) As BooleanPublic Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" _
    (ByVal hFtpSession As Long, ByVal lpszFileName As String) As BooleanPublic Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" _
    (ByVal hFtpSession As Long, ByVal lpszExsiting As String, ByVal lpszNew As String) As Boolean
      

  7.   

    我试过了,就是不能用变量,后来我只能写死了:
    blnRC = FtpGetFile(lnginetconn, "vosung /mainn.exe", "d:\mainn.exe", 1, 0, 1, 0)
      

  8.   

    你的变量必须是String类型。
    不要告诉我你的变量没有声明类型(默认为Variant)。
      

  9.   

    不夸张,由于类型不匹配调用API时程序崩溃很常见。
    jinhui78:吱一声。