博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迅雷API:实现文件下载
阅读量:4557 次
发布时间:2019-06-08

本文共 3096 字,大约阅读时间需要 10 分钟。

迅雷

   今天到迅雷公司的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)”设置为Yes22 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 else51 {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、无论是否下载成功,都必须调用XLStopTask70 XLStopTask(lTaskId);71 72 // 5、释放资源73 XLUninitDownloadEngine();74 return 0;75 }

 

转载于:https://www.cnblogs.com/corerman/p/4726933.html

你可能感兴趣的文章
9.Mongodb与python交互
查看>>
18-[JavaScript]-函数,Object对象,定时器,正则表达式
查看>>
读取短信回执
查看>>
EF 数据初始化
查看>>
PreparedStatement与Statement
查看>>
WebService -- Java 实现之 CXF ( 使用CXF工具生成client 程序)
查看>>
Android学习--网络通信之网络图片查看器
查看>>
[LeetCode] Excel Sheet Column Number
查看>>
安卓广播接收者
查看>>
999线监控
查看>>
Redis在python中的使用
查看>>
理解class.forName()
查看>>
每日一小练——数值自乘递归解
查看>>
二叉搜索树 (BST) 的创建以及遍历
查看>>
MyBatis/Ibatis中#和$的区别
查看>>
【JAVASCRIPT】React学习-组件生命周期
查看>>
win 64 文件操作
查看>>
Java范例集锦(二)
查看>>
C语言变量和常量
查看>>
LInuxDay8——shell脚本编程基础
查看>>