呼叫URLMON.PAS的URLDownloadToFile的問題? |
|
ry_lee
高階會員 發表:368 回覆:251 積分:123 註冊:2002-03-19 發送簡訊給我 |
|
awen
一般會員 發表:0 回覆:4 積分:0 註冊:2006-10-13 發送簡訊給我 |
應該是趨勢科技的軟件在URLMON.DLL裏面攔截了這個函數,儅發現有程式調用這個函數的時候,就報警了。如果趨勢攔截了這個函數,那只能用其他方法替代。建議您使用Delphi自帶的Indy組件中的TIdHTTP組件來下載文件。代碼範例如下:
uses IdHTTP; procedure TYourClass.Someprocedure(const FURL, LocalFileName: string); var http: TIdHTTP; MemStream: TFileStream; Options: TIdHTTPOptions; begin http := TIdHTTP.Create;//創建TIdHTTP組件。 try MemStream := TFileStream.Create(LocalFileName, fmCreate);//創建本地文件流對象。 try http.ConnectTimeout := 30000;//設置http連接超時時間。這裡可以按照您的需求自己設定。 http.ReadTimeout := 120000;//設置讀取http超時時間。 http.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)';//仿造IE進行下載。 http.HandleRedirects := True;//允許服務器發送跳轉Response后,IdHTTP自動下載新地址。 if hoForceEncodeParams in http.HTTPOptions then//這個代碼是取消IdHTTP自己對URL的編碼功能,因爲FURL可能傳入已經編碼過的URL地址。如果您的FURL參數中,傳入的字符串未做URLEncode的話,這個If和一下的begin end之間的代碼可以註釋掉。 begin Options := http.HTTPOptions; Exclude(Options, hoForceEncodeParams); http.HTTPOptions := Options; end; try http.Get(FURL, MemStream);//執行下載。 except //加入您的異常處理代碼 end; finally MemStream.Free; end; finally http.Free; end; end; 上述代碼在XP Pro SP2,Delphi7,Indy10(2006年9月9日的Snapshot版本)中測試通過。 |
ry_lee
高階會員 發表:368 回覆:251 積分:123 註冊:2002-03-19 發送簡訊給我 |
|
ry_lee
高階會員 發表:368 回覆:251 積分:123 註冊:2002-03-19 發送簡訊給我 |
|
awen
一般會員 發表:0 回覆:4 積分:0 註冊:2006-10-13 發送簡訊給我 |
這是因爲Indy10對很多事件的聲明都發生了變化,比如,最新的Indy10 DevSnapshot on 2006-9-9裏面,所有Indy Component的祖先類,TIdComponent修改了OnWorkBegin,OnWork的聲明,其中,AWorkMax和AWorkCount已經由Integer該聲明成了Int64,以支持IdFTP等組建上傳大於2GB文件的功能。這只是一個例子,Indy10的最新Snapshot裏面改動了好多東西。但是,他的Demo不能編譯的問題,一般就是Demo裏面的聲明沒有修改過來導致的。所以,如果您使用的是動態創建的代碼,則不會有任何問題。我給您輸入的代碼是動態創建對象,所以不存在您提到的那些問題,您可以放心使用。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |