Code:
var
UrlMonHandle: HMODULE=0;
errcode:integer=0;
URLDownloadToCacheFile: function(Caller: IUnknown; URL: PAnsiChar;
FileName: PAnsiChar; FileNameBufLen: DWORD; Reserved: DWORD;
StatusCB: IInterface {IBindStatusCallback}): HResult; stdcall;
procedure LoadFromURL(URL: string; Stream: TMemoryStream);
procedure InitURLMon;
const
UrlMonLib = 'URLMON.DLL'; { Do not localize }
sURLDownloadToCacheFileA = 'URLDownloadToCacheFileA'; { Do not localize }
begin
if not Assigned(URLDownloadToCacheFile) then
begin
UrlMonHandle := LoadLibrary(UrlMonLib);
if UrlMonHandle = 0 then
raise Exception.CreateResFmt(@SUrlMonDllMissing, [UrlMonLib]);
URLDownloadToCacheFile := GetProcAddress(UrlMonHandle, sURLDownloadToCacheFileA);
end;
end;
var
FileName: array[0..MAX_PATH] of Char;
pp:pchar;
begin
InitURLMon;
pp:=@URL[1];
fillchar(pp,sizeof(FileName),0);
if URLDownloadToCacheFile(nil,pp , @FileName[0], SizeOf(FileName), 0, nil) <> S_OK then
raise Exception.CreateResFmt(@SErrorDownloadingURL, [url]);
Stream.LoadFromFile(FileName);
end; |