前言:
今天各位老铁们对“c语言windows函数库下载”大约比较关注,你们都需要了解一些“c语言windows函数库下载”的相关资讯。那么小编在网络上汇集了一些有关“c语言windows函数库下载””的相关内容,希望同学们能喜欢,各位老铁们快快来学习一下吧!1.1 使用 urlmon 下载文件
urlmon.dll内置于Windows中,可用于从网站下载文件。它支持SSL/TLS连接。但仅限Windows;
在 uses 语句中添加 URLMon 单元。
URLDownloadToFile 函数原型:
function URLDownloadToFile(pCaller: pointer; URL: PChar; FileName: PChar; Reserved: DWORD; lpfnCB : pointer): HResult; stdcall; external 'urlmon.dll' name 'URLDownloadToFileA';
使用示例:
procedure TForm1.Button1Click(Sender: TObject);var Source, Dest: string;begin Source:=';; Dest:='C:\Windows\temp\data.txt'; if URLDownloadToFile(nil, PChar(Source), PChar(Dest), 0, nil)=0 then showmessage('Download ok!') else showMessage('Error downloading '+Source);end;1.2 使用 fphttpclient 下载文件
fphttpclient作为fcl web包的一部分随FPC提供,也可以单独使用。
在 uses 语句中添加 fphttpclient 单元。
我们可以使用 TFPHttpClient 类实例的 Get 方法来下载文件,示例代码:
program dl_fphttp_d;{$mode delphi}{$ifdef windows}{$apptype console}{$endif}uses sysutils, classes, fphttpclient, openssl, opensslsockets;const Filename = 'testdownload.txt';var Client: TFPHttpClient; FS: TStream; SL: TStringList;begin { SSL initialization has to be done by hand here } InitSSLInterface; Client := TFPHttpClient.Create(nil); FS := TFileStream.Create(Filename,fmCreate or fmOpenWrite); try try { Allow redirections } Client.AllowRedirect := true; Client.Get(';,FS); except on E: EHttpClient do writeln(E.Message) else raise; end; finally FS.Free; Client.Free; end; { Test our file } if FileExists(Filename) then try SL := TStringList.Create; SL.LoadFromFile(Filename); writeln(SL.Text); finally SL.Free; end; end.1.3 使用 Synapse 下载文件
Synapse 提供串行端口和 TCP/IP 连接。它与其他库不同,您只需要向代码中添加一些 Synapse Pascal 源代码文件;无需安装软件包等。唯一的例外是,如果您想使用SSL/TLS/SSH等加密,则需要外部加密库。
Synapse 通过阻塞(同步)套接字或有限的非阻塞模式处理网络通信。Synapse 未使用异步套接字。Synapse 包含简单的低级非可视对象,便于无问题地进行编程。(无需多线程同步,无需windows消息处理,…)非常适合命令行实用程序、可视化项目、NT服务等。
在 Synapse 官方网站(),还可以找到 Synapse 项目的一个补充,名为SynaSer。这是用于阻止串行端口上的通信的库。它是Synapse中的非可视化类,程序员界面与Synapsee非常相似。
使用 Synapse 时,Lazarus、Delphi 需要安装,CodeTyphon 默认已经安装 Synapse。
编写下载文件程序时,在 uses 语句中添加 httpsend 单元。示例代码:
...uses httpsend,...function DownloadHTTP(URL, TargetFile: string): Boolean;var HTTPGetResult: Boolean; HTTPSender: THTTPSend;begin Result := False; HTTPSender := THTTPSend.Create; try HTTPGetResult := HTTPSender.HTTPMethod('GET', URL); if (HTTPSender.ResultCode >= 100) and (HTTPSender.ResultCode<=299) then begin HTTPSender.Document.SaveToFile(TargetFile); Result := True; end; finally HTTPSender.Free; end;end;1.4 综合示例
使用以上三种方式下载文件。界面如下:
具体操作不再赘述,代码如下:
unit unitmain;{$mode objfpc}{$H+}interfaceuses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, fphttpclient, httpsend, UrlMon;type { TFormMain } TFormMain = class(TForm) SynapseDownButton: TButton; FPHttpClientDownButton: TButton; UrlDownButton: TButton; procedure SynapseDownButtonClick(Sender: TObject); procedure FPHttpClientDownButtonClick(Sender: TObject); procedure UrlDownButtonClick(Sender: TObject); private public end;var FormMain: TFormMain;implementation{$R *.frm}{ TFormMain }procedure TFormMain.UrlDownButtonClick(Sender: TObject);var Source, Dest: String;begin Source := ';; Dest := 'e:\temp\redis-6.2.1.tar.gz'; try if UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0 then ShowMessage('文件下载成功') else ShowMessage('文件下载失败'); except ShowMessage('文件下载失败'); end;end;procedure TFormMain.FPHttpClientDownButtonClick(Sender: TObject);var HttpClient: TFPHttpClient; DownLoadFile:TFileStream;begin DownLoadFile:=TFileStream.Create('e:\temp\redis-4.0.10.tar.gz',fmCreate); HttpClient := TFPHttpClient.Create(nil); try HttpClient.AllowRedirect := True; HttpClient.Get(';, DownLoadFile); ShowMessage('文件下载成功'); except ShowMessage('文件下载失败'); end; DownLoadFile.Free; HttpClient.Free;end;procedure TFormMain.SynapseDownButtonClick(Sender: TObject);var HTTPSender: THTTPSend;begin HTTPSender := THTTPSend.Create; try HTTPSender.HTTPMethod('GET', ';); if (HTTPSender.ResultCode >= 100) and (HTTPSender.ResultCode<=299) then begin HTTPSender.Document.SaveToFile('e:\temp\redis-7.0.5.tar.gz'); ShowMessage('文件下载成功'); end else ShowMessage('文件下载失败'); except ShowMessage('文件下载失败'); end; HTTPSender.Free;end;end.
标签: #c语言windows函数库下载