DLL文件动态调用
library AngToArcDLL; //dll工程的工程名 { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } uses SysUtils, Classes; {$R *.res} function FunAngToArc(d: double): double; stdcall; //函数的书写形式 begin result := d / 180.0 * pi; end; exports //该关键字表明下面将列出需要输出的函数 FunAngToArc; begin end.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Edit1: TEdit; Edit2: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} type TFunAngToArc = function(d: double): double; stdcall; procedure TForm1.Button1Click(Sender: TObject); var pfunc: TFarProc; hd1: THAndle; begin hd1 := loadlibrary('AngToArcDLL.dll'); //将指定动态链接库装入内存,返回句柄 if hd1 > 32 then begin pfunc := GetProcAddress(hd1,'FunAngToArc'); //得到具体函数地址 edit2.Text := floattostr(TFunAngToArc(pfunc)(strtofloat(edit1.Text))); end; freelibrary(hd1); //释放动态链接库占用的内存 end; end.