今天到迅雷公司的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:实现文件下载的更多相关文章

  1. 迅雷 API 接口说明文档 -调用迅雷自动下载

    我们可以利用迅雷提供的开放API接口来自动下载文件.详细的接口说明大家可以看下面的. 先要说明一下的就是 迅雷的API接口是用 .com 来调用的 首先就是脚本了,各种语言写法不同,我这里提供用vbs ...

  2. ASP.NET Web API编程——文件下载

    断点续传基本原理 HTTP协议中与断点续传相关的HTTP头为:Range和Content-Range标头,断点续传实现流程: 1)客户端请求下载一个文件,文件的总长度为n:已经下载了一部分文件,长度为 ...

  3. ASP.NET Web API 2 之文件下载

    Ø  前言 目前 ASP.NET Web API 的应用非常广泛,主要承载着服务端与客户端的数据传输与处理,如果需要使用 Web API 实现文件下载,该 实现呢,其实也是比较简单,以下示例用于下载安 ...

  4. 解析大型.NET ERP系统架构设计 Framework+ Application 设计模式

    我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应该具备良好的可扩展性和可维护性,系统中的功能紧密关联.除去业务上的复杂性,如何设计这样的一个协 ...

  5. NET ERP系统架构设计

    解析大型.NET ERP系统架构设计 Framework+ Application 设计模式 我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应 ...

  6. [No000079]罗辑思维2016.1.2日前的所有每日语音,python3做的网络爬虫

    源码地址:https://github.com/charygao/Download_the_LouJiSiWei 写过很久了,vision1.0里有不少bug,今天重新整理修改了一下,运行了一下,2个 ...

  7. gof设计模式回顾

    gof23根据讲师学习笔记回顾: 1.gof:Gang of Four;叫grasp更具有针对性,解决具体的问题; ---------------------总共分为三大类: ---------创建型 ...

  8. Alamofire 4.0 迁移指南

    Alamofire 4.0 是 Alamofire 最新的一个大版本更新, 一个基于 Swift 的 iOS, tvOS, macOS, watchOS 的 HTTP 网络库. 作为一个大版本更新, ...

  9. ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

    对于Web应用来说,它的界面是由浏览器根据HTML代码及其引用的相关资源进行渲染后展示给用户的结果,换句话说Web应用的界面呈现工作是由浏览器完成的,Web应用的原理是通过Http协议从服务器上获取到 ...

随机推荐

  1. 行内人解读开发一个App需要多少钱?

    对于很多互联网的创业者来说,评估前期的创业成本是很重要的.在这几年的创业大潮中,伴随着“互联网+”和“互联网思维”的普及,很多创业项目选择了开发app作为创业项目的载体.在我接触到的很多创业者,找Ap ...

  2. hdu 2256 Problem of Precision

    点击打开hdu 2256 思路: 矩阵快速幂 分析: 1 题目要求的是(sqrt(2)+sqrt(3))^2n %1024向下取整的值 3 这里很多人会直接认为结果等于(an+bn*sqrt(6))% ...

  3. hdu4111 Alice and Bob

    Alice and Bob Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. 关于IE7 兼容问题

    关于a标签的写法(目前测试只针对IE7,IE8及谷歌浏览器): <a  onclick = 方法名(参数);></a>  此写法在 IE8以上及谷歌浏览器使用都没有问题,但在I ...

  5. OC与JS互相调用

    近期项目中要用到html5来实现.涉及到OC调用JS,以及JS调用OC的方法.这里把遇到的问题以及实现方法介绍一下. // // ViewController.h // OC_And_JS // // ...

  6. 华为OJ:2041 放苹果

    这道题难点不在于代码怎么写,而是思路怎么想. 感觉一般这样的题要么你理好一个思路要么你最后总结出一个公式,要么你自己模拟它的运作方式,用迭代,或者递归的方式来做. 有点像我们曾经学的排列组合. 对于m ...

  7. 阿里云OS和Android的关系(本文转载月光博客)

    原博客地址:http://www.williamlong.info/archives/3222.html 近日,有关谷歌Android和阿里云的争论闹得沸沸扬扬,谷歌高管.Android开发领头人An ...

  8. 使用Mina框架开发 QQ Android 客户端

    Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步AP ...

  9. django: db howto - 1

    以在 Django 中使用 MySQL 为例,首先要安装 MySQL 和 MySQL-python 组件,确保 python 能执行 import MySQLdb. MySQL 中创建数据库: [ro ...

  10. Redhat修改本地yum源

    1.将Centos系统的ios文件传到服务器,比如传到/root目录下: 2.将ios文件挂载到本地,需要在本地建立一个文件夹,比如/yum; mkdir /yum mount -o loop /ro ...