//通过 DLL Wizard 建立: library TestDLL; uses SysUtils, Classes, Dialogs; {$R *.res} //建立过程 procedure Test; begin ShowMessage('TestDLL.Test'); end; <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> //输出 exports Test; begin end. //在其他工程调用,如果不在一个工程组,需要在相同目录下、System32下或指定路径; //声明可以在实现区或接口区,这里的函数名要一致,甚至大小写。 //调用测试: procedure Test; external 'TestDLL.dll'; procedure TForm1.Button1Click(Sender: TObject); begin Test; end;
调用外部dll
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; //MB 函数的声明: function MB(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall; implementation {$R *.dfm} {调用外部 DLL 中的函数,譬如调用系统 user32.dll 中的 MessageBoxA} //function MB(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; // stdcall; external user32 name 'MessageBoxA'; {其中 user32 是 Delphi 定义的常量 'user32.dll',可以直接写成:} //function MB(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; // stdcall; external 'user32.dll' name 'MessageBoxA'; {name 后面说明函数的真实名字} {external 子句说明单元载入时就加载函数,也就是早绑定;如果晚绑定需要用 LoadLibrary} {stdcall 指令表示参数传递是从右到左(Pascal则反之),不通过CPU寄存器传递} {4个参数的数据类型可以使用对应的 Delphi 数据类型,譬如:} //function MB(hWnd: LongWord; lpText, lpCaption: PChar; uType: LongWord): Integer; // stdcall; external 'user32.dll' name 'MessageBoxA'; {或者是:} //function MB(hWnd: Cardinal; lpText, lpCaption: PChar; uType: Cardinal): Integer; // stdcall; external 'user32.dll' name 'MessageBoxA'; {如果函数在此单元声明后,需要给其他单元调用,需要先在 interface 区声明:} //function MB(hWnd: Cardinal; lpText, lpCaption: PChar; uType: Cardinal): Integer; // stdcall; {本例已经这样做了,如果要测试其他几种情况,需要先注释掉它} {然后在 implementation 区,说明函数的来源:} function MB; external 'user32.dll' name 'MessageBoxA'; //调用测试: procedure TForm1.Button1Click(Sender: TObject); var t,b: PChar; begin t := '标题'; b := '内容'; MB(0,b,t,0); end; end.