我做了一个程序,有一项功能是在ftp上查找指定文件,我使用的是api函数进行操作。函数调用等肯定没问题,在很多机子上都正常安装,正常运行。但昨天在一个xp系统上安装时却出现了wininet.dll无法覆盖的问题?即使是断开所有网络连接,进入安全模式也无法覆盖!我把winined.dll拷贝到应用程序安装目录下运行程序时,发现调用FtpFindFirstFile函数时返回12003号错误。而在其他机子上从未出现此问题,一直运行良好???代码如下:
    '取得目录下第一个文件
    lFind = FtpFindFirstFile(mlConnection, sFilter, pData, 0, 0)
    lLastError = Err.LastDllError
    'Debug.Print lLastError
    '如果没有文件,则返回空记录集
    If lFind = 0 Then
        'MsgBox lLastError
        If lLastError = ERROR_NO_MORE_FILES Then
            '空目录
            Set GetDirectoryList = oRS
            Exit Function
        Else
            On Error GoTo 0
            Err.Raise lLastError, "cFTP::GetDirectoryList", "Error looking at directory " & Directory & "\" & FilterString
        End If
        Exit Function
    End If
就是在第2行,Err.LastDllError返回的是12003,不知为何?
internet连接调用如下:
mlConnection = InternetConnect(mlINetHandle, msHostAddress, INTERNET_INVALID_PORT_NUMBER, _
        msUser, msPassword, INTERNET_SERVICE_FTP, 0, 0)

解决方案 »

  1.   

    啊?连如何替换wininet.dll都没人知道么?如何查找一个dll文件有哪些程序在调用?
      

  2.   

    呵呵,大家可能都在休假吧:)
    首先,需要说明的是我这里没有装xp,不知道winined.dll在xp下覆盖后,系统能否正常工作。如果其它的机器上替换winined.dll后,确认系统没有问题的话,再替换吧。//连如何替换wininet.dll都没人知道么
    在其他操作系统下替换,如果只有一个xp系统的话,可在dos下替换(可用win98的启动盘),当然改完注册表后,直接替换也可//如何查找一个dll文件有哪些程序在调用
    打开HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Currentversion\SharedDlls子键,在右边的窗口中,每个值项的数据都说明了该值项的.dll文件有几个程序共享,如果数据为0,则可知道该文件没有程序共享,可以删掉了。
      

  3.   

    这样滴:在其它机器上安装都没问题(也是xp系统),即可以顺利覆盖,正常工作,唯一台机器不可。
    ntfs系统如何替换?
      

  4.   

    //我把winined.dll拷贝到应用程序安装目录下运行程序时,发现调用FtpFindFirstFile函数时返回12003号错误。而在其他机子上从未出现此问题,一直运行良好???http://vbnet.mvps.org/index.html?code/internet/ftplist.htm
    有一段代码,你参考一下
      

  5.   

    On Error GoTo 0
    就算是处理吧-_-!
      

  6.   

    给你贴一个别人的,没试过,供你借鉴
    http://vbnet.mvps.org/code/internet/ftplist.htm
      

  7.   

    谢谢楼上的,看过了,解决不了我的问题。不知谁有可选端口地连接的ftp程序源码?能否给我一份?谢谢
      

  8.   

    已经解决,具体见:http://expert.csdn.net/Expert/TopicView1.asp?id=2636650