迅雷API:實現文件下載


迅雷

   今天到迅雷公司的SDK文檔網站上逛了逛,竟然發現它們已經提供了完備的API接口,我心中不禁大喜但是SDK資料中的原版開發文件已經很難找到了,幸運的是我在github上搜索到了所需的文件,在這里我已經打包完畢,點擊 這里 下載。
      在這個SDK中,包含有.h頭文件,lib庫文件,dll動態鏈接庫文件,迅雷公司,我們首先用VC++提供的Depends工具查看一下dll文件中的函數列表。

迅雷SDK DLL文件函數列表

      從這個函數列表圖片,可以看出SDK中提供的功能還是很全面的,對於下載功能的封裝還是挺讓人滿意。下面我來按照代碼執行順序對函數進行相關的解釋

XLInitDownloadEngine BOOL __stdcall XLInitDownloadEngine(); 初始化迅雷下載引擎。
XLURLDownloadToFile 迅雷 SDK XLURLDownloadToFile函數原型 根據URL開啟下載。
XLQueryTaskInfo 迅雷7 SDK XLQueryTaskInfo 函數原型 查詢指定任務當前狀態。
XLStopTask VOID __stdcall XLStopTask(LONG lTaskId); 停止指定任務(必須)。
XLUninitDownloadEngine BOOL __stdcall XLUninitDownloadEngine(); 進行資源回收操作。

      上面的函數是一個完整的工作流程,下面我們繼續把其他函數做一下介紹。

XLPauseTask DWORD __stdcall XLPauseTask(LONG lTaskId, LONG & lNewTaskId); 暫停指定任務。
XLContinueTask DWORD __stdcall XLContinueTask(LONG lTaskId); 根據編號繼續下載。
XLContinueTaskFromTdFile 迅雷7 SDK XLContinueTaskFromTdFile 函數原型 根據TD文件繼續下載。
XLGetErrorMsg 迅雷7 SDK XLGetErrorMsg 函數原型 將錯誤碼對應的錯誤消息拷貝至指定的緩沖區。

      特殊參數類型 LONG  &:直接定義LONG類型變量,傳進函數即可。


      下面我對樣例代碼進行一些解釋

 1 //VS2008 UNICODE
 2 #include "stdafx.h"
 3 #include <stdio.h>
 4 #include "stdlib.h"
 5 #include <windows.h>
 6 #include "XLDownload.h"
 7 #include "XLError.h"
 8 #pragma comment(lib, "XLDownload.lib")
 9 
10 // 唯一的應用程序對象
11 
12 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
13 {
14     // 1、初始化下載引擎
15     if ( FALSE == XLInitDownloadEngine() )
16     {
17         printf("Initialize download engine failed.\n");
18         return 1;
19     }
20     // 2、啟動新任務
21     // PS:如果鏈接無法通過,請把工程屬性“將wchar_t設置為內置類型        (/Zc:wchar_t)”設置為Yes
22     LONG   lTaskId = 0;
23     DWORD  dwRet   = XLURLDownloadToFile( //這里開始下載,迅雷把下載和狀態查詢進行了分離,創新之處
24         _T("d:\\notepad++.exe"), 
25         _T("http://dlsw.baidu.com/sw-search-sp/soft/cc/13478/npp.6.7.4.Installer.1421032427.exe"), 
26         _T(""), lTaskId);
27 
28     printf("Begin download file.\n");
29 
30     // 3、查詢任務狀態
31     do 
32     {
33         ::Sleep(1000);
34         system("cls"); //windows 清屏
35         ULONGLONG   ullFileSize = 0;
36         ULONGLONG   ullRecvSize = 0;
37         LONG        lStatus     = -1;
38 
39         dwRet = XLQueryTaskInfo(lTaskId, &lStatus, &ullFileSize, &ullRecvSize);
40         if ( XL_SUCCESS==dwRet )
41         {
42             // 輸出進度信息
43             if ( 0 != ullFileSize )
44             {
45                 double  douProgress = (double)ullRecvSize/(double)ullFileSize;
46             //    printf("%.2lfMB",(double)ullRecvSize/8/1024/1024);
47                 douProgress *= 100.0;
48                 printf("Download progress:%.2f%%   %.2lfMB\n", douProgress,(double)ullRecvSize/1024/1024);
49             }
50             else
51             {
52                 printf("File size is zero.\n");
53             }
54 
55             if ( enumTaskStatus_Success==lStatus )
56             {
57                 printf("Download successfully.\n");
58                 break;
59             }
60 
61             if ( enumTaskStatus_Fail==lStatus )
62             {
63                 printf("Download failed.\n");
64                 break;
65             }
66         }
67     } while( XL_SUCCESS==dwRet );
68 
69     // 4、無論是否下載成功,都必須調用XLStopTask
70     XLStopTask(lTaskId);
71 
72     // 5、釋放資源
73     XLUninitDownloadEngine();
74     return 0;
75 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM