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

最新文章

  1. [板子]倍增LCA
  2. 元素的click与dblclick
  3. Halcon pick_and_place_scara_stationary_cam.hdev程序学习
  4. cursor:pointer
  5. mysql基本数据类型(mysql学习笔记三)
  6. DC-DC升压(BOOST)电路原理
  7. css选择器优化
  8. protected-broadcast的作用
  9. HDU 6006 Engineer Assignment:状压dp
  10. C语言程序设计第二次作业0
  11. Ext.isIterable
  12. 1-Two Sum @LeetCode
  13. Confluence 6 配置时间和日期格式
  14. C语言中存储类别又分为四类:自动(auto)、静态(static)、寄存器的(register)和外部的(extern)。
  15. MySql数据库事务正常提交,回滚失败
  16. CentOS 6.5下Redis安装测试
  17. 《高性能MySQL》学习笔记
  18. JAVA入门之基础语言
  19. tensorflow session 和 graph
  20. linux mongodb replica set集群安装

热门文章

  1. jsp中导入导出excel,ssh框架
  2. Android学习之多点触摸并不神秘
  3. 开源中国安卓client源代码学习(一) 渐变启动界面
  4. arcpagelistarclist列表分页
  5. java基础之导入(Excel)2
  6. 配置 VS 2015 开发跨平台手机应用
  7. Android -------- 序列化器生成xml文件
  8. myFocus焦点图插件
  9. 闭包中的 this 对象
  10. servlet 具体实现