码迷,mamicode.com
首页 > Windows程序 > 详细

迅雷API:实现文件下载

时间:2015-08-13 14:12:10      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

   今天到迅雷公司的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 <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 }

 

迅雷API:实现文件下载

标签:

原文地址:http://www.cnblogs.com/corerman/p/4726933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!