我用URLDownloadToFile下载文件,以前没问题的,但近来可能是服务器忙的原因,出问题了。
1 从网站下载下来的文件比实际小,但这个函数还是返回S_OK了,而从msdn看到,该函数返回值只有两个:
E_OUTOFMEMORY The buffer length is invalid or there was insufficient memory to complete the operation.
S_OK The operation succeeded.
难道这个函数在除了不够内存外都返回S_OK?
怎样才能判断出这个函数下载失败了?2 上次失败后,IE里面的缓存不是完整的文件,但再次运行URLDownloadToFile后程序却拿那个不完整的缓存来交货
1 从网站下载下来的文件比实际小,但这个函数还是返回S_OK了,而从msdn看到,该函数返回值只有两个:
E_OUTOFMEMORY The buffer length is invalid or there was insufficient memory to complete the operation.
S_OK The operation succeeded.
难道这个函数在除了不够内存外都返回S_OK?
怎样才能判断出这个函数下载失败了?2 上次失败后,IE里面的缓存不是完整的文件,但再次运行URLDownloadToFile后程序却拿那个不完整的缓存来交货
解决方案 »
- 打印预览界面的打印按钮单击后程序异常崩溃的问题
- ************简单问题来帮忙啊!有关文本框的问题*****************
- 媒体格式与注册表
- 多文档程序:打开显示图像时候,如何调整子窗口的大小,使得与图像大小一致?
- 紧急的问题???
- 请教一下?!!!!!!!
- 今天在CSDN上下载一个程序,在VC中想单步跟踪,得到提示为该程序没有包含调试信息。请位哪位知道如何设置VC改变这种局面。
- Ping的超时设置(setsockopt)函数?
- 求一个开立方的算法,望各位前辈帮忙。。
- 关于判断连网状态。请救救我!50分赠送!
- 请教高手们编写一个用来演示的demo使用什么语言或者工具?
- 有关文本显示
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
URLMon,ComCtrls, ActiveX;
type
TfrmUpdate = class(TForm,IBindStatusCallback)
suiForm: TsuiForm;
btnCancel: TdxButton;
tmrUdapte: TTimer;
suiFileTheme: TsuiFileTheme;
plStatus: TPanel;
plProgress: TPanel;
Bevel1: TBevel;
procedure btnCancelClick(Sender: TObject);
private
function OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall;
function GetPriority(out nPriority): HResult; stdcall;
function OnLowResource(reserved: DWORD): HResult; stdcall;
function OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG;szStatusText: LPCWSTR): HResult; stdcall;
function OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall;
function GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall;
function OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc;stgmed: PStgMedium): HResult; stdcall;
function OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall;
function GetHTMLFile(const URL, FileName: string): HRESULT;
public
{ Public declarations }
end;const
BINDSTATUS_CONTENTDISPOSITIONATTACH = BINDSTATUS_LOADINGMIMEHANDLER + 1;
BINDSTATUS_FILTERREPORTMIMETYPE = BINDSTATUS_CONTENTDISPOSITIONATTACH + 1;
BINDSTATUS_CLSIDCANINSTANTIATE = BINDSTATUS_FILTERREPORTMIMETYPE + 1;
BINDSTATUS_IUNKNOWNAVAILABLE = BINDSTATUS_CLSIDCANINSTANTIATE + 1;
BINDSTATUS_DIRECTBIND = BINDSTATUS_IUNKNOWNAVAILABLE + 1;
BINDSTATUS_RAWMIMETYPE = BINDSTATUS_DIRECTBIND + 1;
BINDSTATUS_PROXYDETECTING = BINDSTATUS_RAWMIMETYPE + 1;
BINDSTATUS_ACCEPTRANGES = BINDSTATUS_PROXYDETECTING + 1;var
frmUpdate: TfrmUpdate;
DoCancel :Boolean=False; //强制退出消息implementation
uses
IniFiles,Global,UnitDialog,UnitLanguage,FileName;
{$R *.dfm}//------------------------------------------------------------------------------
function TfrmUpdate.GetHTMLFile(const URL , FileName : string) : HRESULT;
var
status : IBindStatusCallback ;
begin
status := IBindStatusCallback(self);
result := UrlDownLoadToFile(nil, pChar(URL) ,pChar(FileName),0 ,Status);
end;//------------------------------------------------------------------------------
function TfrmUpdate.GetBindInfo(out grfBINDF: DWORD;
var bindinfo: TBindInfo): HResult;
begin
result := E_NOTIMPL;
end;//------------------------------------------------------------------------------
function TfrmUpdate.GetPriority(out nPriority): HResult;
begin
result := E_NOTIMPL;
end;
function TfrmUpdate.OnDataAvailable(grfBSCF, dwSize: DWORD;
formatetc: PFormatEtc; stgmed: PStgMedium): HResult;
begin
result := E_NOTIMPL;
end;//------------------------------------------------------------------------------
function TfrmUpdate.OnLowResource(reserved: DWORD): HResult;
begin
result := E_NOTIMPL;
end;//------------------------------------------------------------------------------
function TfrmUpdate.OnObjectAvailable(const iid: TGUID;
punk: IInterface): HResult;
begin
result := E_NOTIMPL;
end;//-----------------------------------------------------------------------------
function TfrmUpdate.OnProgress(ulProgress, ulProgressMax,ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult;
var
Status:string;
begin
case ulStatusCode of
BINDSTATUS_FINDINGRESOURCE : Status:='Finding resource ' + szStatusText;
BINDSTATUS_CONNECTING : Status:='Connecting to ' + szStatusText;
BINDSTATUS_REDIRECTING : Status:='Redirecting...';
BINDSTATUS_BEGINDOWNLOADDATA : begin
Status:='Start to download ' + szStatusText;
//Animate.Active:=True;
end;
BINDSTATUS_DOWNLOADINGDATA : Status:='Downloading...';
BINDSTATUS_ENDDOWNLOADDATA : begin
Status:='Complete downloading ' + szStatusText;
//Animate.Active:=False;
end;
BINDSTATUS_BEGINDOWNLOADCOMPONENTS : Status:='Start to download components';
BINDSTATUS_INSTALLINGCOMPONENTS : Status:='Installing components...' ;
BINDSTATUS_ENDDOWNLOADCOMPONENTS : Status:='Complete downloading components';
BINDSTATUS_USINGCACHEDCOPY : Status:='Copying form buffer...';
BINDSTATUS_SENDINGREQUEST : Status:='Sending request...';
BINDSTATUS_CLASSIDAVAILABLE : Status:='Class ID is available';
BINDSTATUS_MIMETYPEAVAILABLE : Status:='MIME type is available';
BINDSTATUS_CACHEFILENAMEAVAILABLE : Status:='Cache file name is available';
BINDSTATUS_BEGINSYNCOPERATION : Status:='Start sync operation';
BINDSTATUS_ENDSYNCOPERATION : Status:='Complete sync operation';
BINDSTATUS_BEGINUPLOADDATA : Status:='Start to upload data';
BINDSTATUS_UPLOADINGDATA : Status:='Uploading data';
BINDSTATUS_ENDUPLOADDATA : Status:='Complete Uploading data';
BINDSTATUS_PROTOCOLCLASSID : Status:='Protocol class ID is available';
BINDSTATUS_ENCODING : Status:='Encoding...';
BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE : Status:='verified MIME is available';
BINDSTATUS_CLASSINSTALLLOCATION : Status:='Class install location';
BINDSTATUS_DECODING : Status:='Decoding...';
BINDSTATUS_LOADINGMIMEHANDLER : Status:='Loading MIME handler';
BINDSTATUS_CONTENTDISPOSITIONATTACH : Status:='Content disposition attach';
BINDSTATUS_FILTERREPORTMIMETYPE : Status:='Filter report MIME type';
BINDSTATUS_CLSIDCANINSTANTIATE : Status:='Clsid can instantiate';
BINDSTATUS_IUNKNOWNAVAILABLE : Status:='Unknown available';
BINDSTATUS_DIRECTBIND : Status:='Direct bind';
BINDSTATUS_RAWMIMETYPE : Status:='MIME type of the resource, before any code sniffing is done';
BINDSTATUS_PROXYDETECTING : Status:='Detecting proxy...';
BINDSTATUS_ACCEPTRANGES : Status:='Valid types of range requests for a resource';
end; Application.ProcessMessages; if DoCancel then
result := E_ABORT
else
result := S_OK; plStatus.Caption:=Status;
plProgress.Caption:='Download :' + IntToStr(ulProgress) +
'; Total : ' + IntToStr(ulProgressMax);end;//------------------------------------------------------------------------------
function TfrmUpdate.OnStartBinding(dwReserved: DWORD;
pib: IBinding): HResult;
begin
result := E_NOTIMPL;
end;//------------------------------------------------------------------------------
function TfrmUpdate.OnStopBinding(hresult: HResult;
szError: LPCWSTR): HResult;
begin
result := E_NOTIMPL;
if szError<>nil then
Alert(WideCharToString(szError));
end;//------------------------------------------------------------------------------
procedure TfrmUpdate.btnCancelClick(Sender: TObject);
begin
DoCancel:=True;
ModalResult:=mrCancel;
end;
end.