uses Windows;//使用Windows单元,因为该单元定义了调用windows api的方法,如loadLibrary()和getProcAddress()//定义你要调用的动态链接库的方法指针 TShowCalendar=function(AHandle:THandle;ACaption:String):TDateTime;stdcall;//以下是调用的实现 procedure TForm1.Button4Click(Sender: TObject); var showCalendar:TShowCalendar;//方法指针 aHandle:THandle;//句柄 begin //ShowCalendar(application.Handle,'This is an DLL modal form.'); aHandle:=LoadLibrary('MDLLForm.dll');//加载动态链接库,获取链接库句柄 if aHandle<>0 then begin @showCalendar:=getProcAddress(aHandle,'ShowCalendar');//利用句柄获取链接库的方法指针 showCalendar(application.Handle,'This is an DLL modal form.');//调用该方法 end; end;
TShowCalendar=function(AHandle:THandle;ACaption:String):TDateTime;stdcall;//以下是调用的实现
procedure TForm1.Button4Click(Sender: TObject);
var
showCalendar:TShowCalendar;//方法指针
aHandle:THandle;//句柄
begin
//ShowCalendar(application.Handle,'This is an DLL modal form.');
aHandle:=LoadLibrary('MDLLForm.dll');//加载动态链接库,获取链接库句柄
if aHandle<>0 then
begin
@showCalendar:=getProcAddress(aHandle,'ShowCalendar');//利用句柄获取链接库的方法指针
showCalendar(application.Handle,'This is an DLL modal form.');//调用该方法
end;
end;
调用是对了,不过好像少了释放库这一步:
FreeLibrary(AHandle);
否则,DLL还在内存,只有DLL的引用为0的时候才卸载DLL