365bet官网中文网-365网站靠谱不-28365365体育在线

Est. 1980 · 每日复古新闻

迅雷API:实现文件下载

迅雷API:实现文件下载

今天到迅雷公司的SDK文档网站上逛了逛,竟然发现它们已经提供了完备的API接口,我心中不禁大喜,但是SDK资料中的原版开发文件已经很难找到了,幸运的是我在github上搜索到了所需的文件,在这里我已经打包完毕,点击 这里 下载。 在这个SDK中,包含有.h头文件,lib库文件,dll动态链接库文件,迅雷公司,我们首先用VC++提供的Depends工具查看一下dll文件中的函数列表。

从这个函数列表图片,可以看出SDK中提供的功能还是很全面的,对于下载功能的封装还是挺让人满意。下面我来按照代码执行顺序对函数进行相关的解释

XLInitDownloadEngine

BOOL __stdcall XLInitDownloadEngine();

初始化迅雷下载引擎。

XLURLDownloadToFile

根据URL开启下载。

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

根据TD文件继续下载。

XLGetErrorMsg

将错误码对应的错误消息拷贝至指定的缓冲区。

特殊参数类型 LONG &:直接定义LONG类型变量,传进函数即可。

下面我对样例代码进行一些解释

1 //VS2008 UNICODE

2 #include "stdafx.h"

3 #include

4 #include "stdlib.h"

5 #include

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 }

相关文章