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

從這個函數列表圖片,可以看出SDK中提供的功能還是很全面的,對於下載功能的封裝還是挺讓人滿意。下面我來按照代碼執行順序對函數進行相關的解釋
上面的函數是一個完整的工作流程,下面我們繼續把其他函數做一下介紹。
特殊參數類型 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 }