• C语言实现 IBindStatusCallBack接口, 实现带进度下载


    #include <stdio.h>
    #include <urlmon.h>
    #pragma comment (lib, "urlmon.lib")
    
    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)
        {   
            printf("Downloaded %d of %d bytes\n",
                ulProgress, ulProgressMax); 
            fflush(stdout);
        }
        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;
    }
    
    static const IBindStatusCallbackVtbl IBindStatusCallback_Vtbl =
    {
        QueryInterface,
        AddRef,
        Release,
        OnStartBinding,
        GetPriority,
        OnLowResource,
        OnProgress,
        OnStopBinding,
        GetBindInfo,
        OnDataAvailable,
        OnObjectAvailable
    };
    
    int main(int argc, char *argv[])
    {
        HRESULT hr;
        IBindStatusCallback MyCallback;
        MyCallback.lpVtbl = (IBindStatusCallbackVtbl *)&IBindStatusCallback_Vtbl;
        hr = URLDownloadToFile(NULL, "http://www.baidu.com/index.php", "index.php", 0, &MyCallback);
        if (hr != S_OK)
        {
            printf("Error: %X\n", hr);
        }
        return 0;
    }

    女孩不哭(QQ:191035066)@2012-05-02 16:05:03 @ http://www.cnblogs.com/nbsofer

  • 相关阅读:
    使你的 Google Summer of Code 建议被接收的5个技巧
    洗牌算法
    自由--永不妥协
    Google Code Jam 2014 总结
    《神经网络与深度学习》(三) 稀疏编码
    《神经网络与深度学习》(二) 常用模型之自编码器
    《神经网络与深度学习》(四) 受限玻尔兹曼机
    《神经网络与深度学习》(五) 卷积神经网络CNN及tensorflow代码实现示例
    《神经网络与深度学习》(一) 感知机、多层神经网络、BP算法、深度学习
    语义哈希(semanticHashing)
  • 原文地址:https://www.cnblogs.com/memset/p/2479186.html
Copyright © 2020-2023  润新知