当前位置: 首页 > news >正文

网站的大小网站产品策划

网站的大小,网站产品策划,企业网站开发制作合同,软件工程师级别URLDownloadToFile是urlmon.dll提供的网络操作API#xff0c;可以用于从指定的URL下载文件到本地#xff0c;在C中通过类很容易实现下载进度的获取#xff0c;今天需要在C语言中使用到这个函数#xff0c;这里记录一下使用方法。该函数的定义如下所示。HRESULT URLDownload…URLDownloadToFile是urlmon.dll提供的网络操作API可以用于从指定的URL下载文件到本地在C中通过类很容易实现下载进度的获取今天需要在C语言中使用到这个函数这里记录一下使用方法。该函数的定义如下所示。HRESULT URLDownloadToFile(LPUNKNOWN pCaller,LPCTSTR szURL,LPCTSTR szFileName,_Reserved_ DWORD dwReserved,LPBINDSTATUSCALLBACK lpfnCB);参数pCaller跟ActiveX和COM有关如有兴趣参考参数szURL为下载地址地址的协议必须要是IE浏览器所支持的参数szFileName为文件最终的保存路径例如C:/a.txt参数dwReserved保留始终为0参数lpfnCB是一个IBindStatusCallback指针。在urlmon.h头文件的定义中C语言风格的接口定义如下typedef struct IBindStatusCallbackVtbl{BEGIN_INTERFACEHRESULT ( STDMETHODCALLTYPE *QueryInterface )(__RPC__in IBindStatusCallback * This,/* [in] */ __RPC__in REFIID riid,/* [annotation][iid_is][out] */_COM_Outptr_ void **ppvObject);ULONG ( STDMETHODCALLTYPE *AddRef )(__RPC__in IBindStatusCallback * This);ULONG ( STDMETHODCALLTYPE *Release )(__RPC__in IBindStatusCallback * This);HRESULT ( STDMETHODCALLTYPE *OnStartBinding )(__RPC__in IBindStatusCallback * This,/* [in] */ DWORD dwReserved,/* [in] */ __RPC__in_opt IBinding *pib);HRESULT ( STDMETHODCALLTYPE *GetPriority )(__RPC__in IBindStatusCallback * This,/* [out] */ __RPC__out LONG *pnPriority);HRESULT ( STDMETHODCALLTYPE *OnLowResource )(__RPC__in IBindStatusCallback * This,/* [in] */ DWORD reserved);HRESULT ( STDMETHODCALLTYPE *OnProgress )(__RPC__in IBindStatusCallback * This,/* [in] */ ULONG ulProgress,/* [in] */ ULONG ulProgressMax,/* [in] */ ULONG ulStatusCode,/* [unique][in] */ __RPC__in_opt LPCWSTR szStatusText);HRESULT ( STDMETHODCALLTYPE *OnStopBinding )(__RPC__in IBindStatusCallback * This,/* [in] */ HRESULT hresult,/* [unique][in] */ __RPC__in_opt LPCWSTR szError);/* [local] */ HRESULT ( STDMETHODCALLTYPE *GetBindInfo )(IBindStatusCallback * This,/* [out] */ DWORD *grfBINDF,/* [unique][out][in] */ BINDINFO *pbindinfo);/* [local] */ HRESULT ( STDMETHODCALLTYPE *OnDataAvailable )(IBindStatusCallback * This,/* [in] */ DWORD grfBSCF,/* [in] */ DWORD dwSize,/* [in] */ FORMATETC *pformatetc,/* [in] */ STGMEDIUM *pstgmed);HRESULT ( STDMETHODCALLTYPE *OnObjectAvailable )(__RPC__in IBindStatusCallback * This,/* [in] */ __RPC__in REFIID riid,/* [iid_is][in] */ __RPC__in_opt IUnknown *punk);END_INTERFACE} IBindStatusCallbackVtbl;interface IBindStatusCallback{CONST_VTBL struct IBindStatusCallbackVtbl *lpVtbl;};这里的interface在C语言中的定义为struct IBindStatusCallback回调实际上就是一个结构体结构体只有一个字段IBindStatusCallbackVtbl *指针你需要做的就是对这个结构体内的IBindStatusCallbackVtbl 指针进行实例化。IBindStatusCallbackVtbl 结构中包含了一系列的函数指针也就是用于URLDownloadToFile下载时的回调函数。若要实现下载进度的获取只需要在OnProgress回调中处理即可。控制台示例代码#define _CRT_SECURE_NO_WARNINGS#include #include #include #pragma comment(lib,urlmon)HRESULT (STDMETHODCALLTYPE QueryInterface)(IBindStatusCallback* This,/* [in] */ REFIID riid,/* [iid_is][out] */ void** ppvObject){return E_NOTIMPL;}ULONG (STDMETHODCALLTYPE AddRef)(IBindStatusCallback* This){return E_NOTIMPL;}ULONG (STDMETHODCALLTYPE Release)(IBindStatusCallback* This){return E_NOTIMPL;}HRESULT (STDMETHODCALLTYPE OnStartBinding)(IBindStatusCallback* This,/* [in] */ DWORD dwReserved,/* [in] */ IBinding* pib){return E_NOTIMPL;}HRESULT (STDMETHODCALLTYPE GetPriority)(IBindStatusCallback* This,/* [out] */ LONG* pnPriority){return E_NOTIMPL;}HRESULT (STDMETHODCALLTYPE OnLowResource)(IBindStatusCallback* This,/* [in] */ DWORD reserved){return E_NOTIMPL;}HRESULT (STDMETHODCALLTYPE OnProgress)(IBindStatusCallback* This,/* [in] */ ULONG ulProgress,/* [in] */ ULONG ulProgressMax,/* [in] */ ULONG ulStatusCode,/* [in] */ LPCWSTR szStatusText){if (ulProgress 0) {return S_OK;}printf(%d / %d bytes , %.2f%%\n,ulProgress, ulProgressMax,100*(double)ulProgress/(double)ulProgressMax);return S_OK;}HRESULT (STDMETHODCALLTYPE OnStopBinding)(IBindStatusCallback* This,/* [in] */ HRESULT hresult,/* [unique][in] */ LPCWSTR szError){return E_NOTIMPL;}HRESULT (STDMETHODCALLTYPE GetBindInfo)(IBindStatusCallback* This,/* [out] */ DWORD* grfBINDF,/* [unique][out][in] */ BINDINFO* pbindinfo){return E_NOTIMPL;}HRESULT (STDMETHODCALLTYPE OnDataAvailable)(IBindStatusCallback* This,/* [in] */ DWORD grfBSCF,/* [in] */ DWORD dwSize,/* [in] */ FORMATETC* pformatetc,/* [in] */ STGMEDIUM* pstgmed){return E_NOTIMPL;}HRESULT (STDMETHODCALLTYPE OnObjectAvailable)(IBindStatusCallback* This,/* [in] */ REFIID riid,/* [iid_is][in] */ IUnknown* punk){return E_NOTIMPL;}int main(int argc,char * argv[]) {char path[MAX_PATH];char downloadURL[] https://down.qq.com/qqweb/PCQQ/PCQQ_EXE/PCQQ2020.exe;IBindStatusCallback callBack;IBindStatusCallbackVtbl vtbl;vtbl.QueryInterface QueryInterface;vtbl.AddRef AddRef;vtbl.Release Release;vtbl.OnStartBinding OnStartBinding;vtbl.GetPriority GetPriority;vtbl.OnLowResource OnLowResource;vtbl.OnProgress OnProgress;//进度回调操作vtbl.OnStopBinding OnStopBinding;vtbl.GetBindInfo GetBindInfo;vtbl.OnDataAvailable OnDataAvailable;vtbl.OnObjectAvailable OnObjectAvailable;callBack.lpVtbl vtbl;GetTempPath(sizeof(path),path);strcat(path, tmpqq.exe);printf(保存位置: %s\n, path);URLDownloadToFile(NULL,downloadURL, path,0,callBack);return 0;}扫码领个红包作为打赏吧~~(余额宝支付时可抵现)赏喜欢 (2)or分享 (0)
http://www.yutouwan.com/news/41202/

相关文章:

  • wap网站html5制作网赌app要多少钱
  • 民勤县建设局网站电子购物网站建设视频
  • 美妆网站设计模板2023年房地产最新消息
  • 手机网站建设wap厦门加盟网站建设
  • 能自己做网站接业务吗做百度网站优化多少钱
  • flash布局网站前端面试
  • 网站闭站保护微信公众号和网站建设
  • 关于网站建设的画册wordpress 文章章节
  • 东莞网站设计找谁网站不想续费
  • 网站的点击率怎么查WordPress是静态么
  • 台州企业网站PHP工具箱和WordPress
  • 有做微信婚介网站的吗大庆小程序制作
  • 何如做外贸网站推网wordpress 帕兰映像 安装教程 wordpress
  • 北京网站运营优化公司晋城网站开发
  • 广东住房和城乡建设厅网站造价那个有那种网站
  • 网站建设公司哈joomla网站模板
  • 钓鱼网站实施过程文案网站编辑怎么做
  • 创新网站建设方案书建筑人才网最新招聘信息息
  • 国外网站设计公司如何做行业平台网站
  • 做架构图简单的网站表述网站建设流程
  • 游戏介绍网站模板多用户商城(c2c)网站制作方案
  • 四川省城乡和建设厅网站wordpress下载慢
  • 网站域名的用处采集网站seo
  • 苏州网站建设要点企业网站开发 流程
  • 阿里巴巴网站图片如何做白国外空间
  • 做网站个网站要多少钱网站建设流程报告
  • 郑州网站搭建的公司苏州手机网站建设服务
  • 苏州高端网站网站关键词排名批量查询
  • 计算机毕设代做网站wordpress悬赏功能实现
  • 如何查找网站备案h5制作成品