迅雷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类型变量,传进函数即可。
下面我对样例代码进行一些解释
//VS2008 UNICODE
#include "stdafx.h"
#include <stdio.h>
#include "stdlib.h"
#include <windows.h>
#include "XLDownload.h"
#include "XLError.h"
#pragma comment(lib, "XLDownload.lib") // 唯一的应用程序对象 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
// 1、初始化下载引擎
if ( FALSE == XLInitDownloadEngine() )
{
printf("Initialize download engine failed.\n");
return ;
}
// 2、启动新任务
// PS:如果链接无法通过,请把工程属性“将wchar_t设置为内置类型 (/Zc:wchar_t)”设置为Yes
LONG lTaskId = ;
DWORD dwRet = XLURLDownloadToFile( //这里开始下载,迅雷把下载和状态查询进行了分离,创新之处
_T("d:\\notepad++.exe"),
_T("http://dlsw.baidu.com/sw-search-sp/soft/cc/13478/npp.6.7.4.Installer.1421032427.exe"),
_T(""), lTaskId); printf("Begin download file.\n"); // 3、查询任务状态
do
{
::Sleep();
system("cls"); //windows 清屏
ULONGLONG ullFileSize = ;
ULONGLONG ullRecvSize = ;
LONG lStatus = -; dwRet = XLQueryTaskInfo(lTaskId, &lStatus, &ullFileSize, &ullRecvSize);
if ( XL_SUCCESS==dwRet )
{
// 输出进度信息
if ( != ullFileSize )
{
double douProgress = (double)ullRecvSize/(double)ullFileSize;
// printf("%.2lfMB",(double)ullRecvSize/8/1024/1024);
douProgress *= 100.0;
printf("Download progress:%.2f%% %.2lfMB\n", douProgress,(double)ullRecvSize//);
}
else
{
printf("File size is zero.\n");
} if ( enumTaskStatus_Success==lStatus )
{
printf("Download successfully.\n");
break;
} if ( enumTaskStatus_Fail==lStatus )
{
printf("Download failed.\n");
break;
}
}
} while( XL_SUCCESS==dwRet ); // 4、无论是否下载成功,都必须调用XLStopTask
XLStopTask(lTaskId); // 5、释放资源
XLUninitDownloadEngine();
return ;
}
迅雷API:实现文件下载的更多相关文章
- 迅雷 API 接口说明文档 -调用迅雷自动下载
我们可以利用迅雷提供的开放API接口来自动下载文件.详细的接口说明大家可以看下面的. 先要说明一下的就是 迅雷的API接口是用 .com 来调用的 首先就是脚本了,各种语言写法不同,我这里提供用vbs ...
- ASP.NET Web API编程——文件下载
断点续传基本原理 HTTP协议中与断点续传相关的HTTP头为:Range和Content-Range标头,断点续传实现流程: 1)客户端请求下载一个文件,文件的总长度为n:已经下载了一部分文件,长度为 ...
- ASP.NET Web API 2 之文件下载
Ø 前言 目前 ASP.NET Web API 的应用非常广泛,主要承载着服务端与客户端的数据传输与处理,如果需要使用 Web API 实现文件下载,该 实现呢,其实也是比较简单,以下示例用于下载安 ...
- 解析大型.NET ERP系统架构设计 Framework+ Application 设计模式
我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应该具备良好的可扩展性和可维护性,系统中的功能紧密关联.除去业务上的复杂性,如何设计这样的一个协 ...
- NET ERP系统架构设计
解析大型.NET ERP系统架构设计 Framework+ Application 设计模式 我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应 ...
- [No000079]罗辑思维2016.1.2日前的所有每日语音,python3做的网络爬虫
源码地址:https://github.com/charygao/Download_the_LouJiSiWei 写过很久了,vision1.0里有不少bug,今天重新整理修改了一下,运行了一下,2个 ...
- gof设计模式回顾
gof23根据讲师学习笔记回顾: 1.gof:Gang of Four;叫grasp更具有针对性,解决具体的问题; ---------------------总共分为三大类: ---------创建型 ...
- Alamofire 4.0 迁移指南
Alamofire 4.0 是 Alamofire 最新的一个大版本更新, 一个基于 Swift 的 iOS, tvOS, macOS, watchOS 的 HTTP 网络库. 作为一个大版本更新, ...
- ASP.NET没有魔法——ASP.NET MVC Razor与View渲染
对于Web应用来说,它的界面是由浏览器根据HTML代码及其引用的相关资源进行渲染后展示给用户的结果,换句话说Web应用的界面呈现工作是由浏览器完成的,Web应用的原理是通过Http协议从服务器上获取到 ...
随机推荐
- 设计模式&UML学习
1. 1.1 1.2 2. 2.1 2.2 3.参考文档 [1] 陈金荣:http://blog.csdn.net/cjr15233661143/article/details/8532997 [2] ...
- Thinkphp中distinct的用法
Thinkphp中distincat的用法 TP中distinct()的用处主要是去除重复的值 在Thinkphp手册中也详细说明了(链接:http://document.thinkphp.cn/ma ...
- TCP/IP具体解释--三次握手和四次握手 Dos攻击
TCP连接的状态图 TCP建立连接的三次握手过程,以及关闭连接的四次握手过程 贴一个telnet建立连接,断开连接的使用wireshark捕获的packet截图. 1.建立连接协议(三次握手) (1) ...
- UE4学习笔记(三): 为什么使用C++替代UnrealScript?
原文链接: https://forums.unrealengine.com/showthread.php?2574-Why-C-for-Unreal-4&p=16252&viewful ...
- 大数据笔记13:Hadoop安装之Hadoop的配置安装
1.准备Linux环境 1.0点击VMware快捷方式,右键打开文件所在位置 -> 双击vmnetcfg.exe -> VMnet1 host-only ->修改subnet ip ...
- USB 管道 && 端点
管道是对主机和usb设备间通信流的抽象. 管道和usb设备中的端点一一对应,一个usb设备含有多少个端点,其和主机进行通信时就可以使用多少条管道,且端点的类型决定了管道中数据的传输类型. ...
- display属性解析
none 此元素不会被显示 block 此元素将显示为块级元素,此元素前后会带有换行符. inline 默认.此元素会被显示为内联元素,元素前后没有换行符. inline-block 行内块元素.(C ...
- CentOS7--64安装python的psutil模块
1.以root身份登陆CentOS依次 执行以下命令: wget https://pypi.python.org/packages/source/p/psutil/psutil-2.1.3.tar.g ...
- Linux能力(capability)机制的继承
1.Linux能力机制概述 在以往的UNIX系统上,为了做进程的权限检查,把进程分为两类:特权进程(有效用户ID是0)和非特权进程(有效用户ID是非0).特权进程可以通过内核所有的权限检查,而非特权进 ...
- rhel6.4 using centos source
rhel 默认的 yum 依赖于 rhn,要注册收费才能 update,改用 centos 的源: rpm -e yum* --nodeps rpm -qa | grep yum | xargs rp ...



