procedure TForm1.Button1Click(Sender: TObject); var crForm:Tcrform; begin libHandle:=windows.LoadLibrary('project1.dll'); if (libHandle=0) or (libHandle=INVALID_HANDLE_VALUE) then begin TDlle.Create('load error'); Exit; end; @crForm:=windows.GetProcAddress(libHandle,'crForm'); if not (@crForm=nil) then crForm(application.Handle) else sysutils.RaiseLastWin32Error; end;
procedure TForm1.Button2Click(Sender: TObject); begin if (libHandle<>0) and (libHandle<>INVALID_HANDLE_VALUE) then begin windows.FreeLibrary(libHandle); libHandle:&#61;0; end; end;
procedure TForm1.FormCreate(Sender: TObject); begin libHandle:&#61;0; end;
end.
DLL程序。
library Project1;
uses SysUtils, Classes, forms, windows, dialogs, Unit1 in &#39;Unit1.pas&#39; {Form1};
//{$R *.res} //用了出口入口函数
procedure DllEntry(dllReason:dword); begin case dllReason of windows.DLL_PROCESS_ATTACH: begin end; windows.DLL_PROCESS_DETACH: begin if fm<>nil then//再注意这里。 fm.Free; Application.Handle:&#61;0;//注意这里。。。。 end; end;// end case end;
function crForm(const aHandle:THandle):pchar;stdcall; begin application.Handle:&#61;aHandle; fm:&#61;tform1.Create(nil); result:&#61;pchar(&#39;ok&#39;); fm.Show; end;
exports crForm;
begin dllProc:&#61;&#64;dllEntry; dllEntry(windows.DLL_PROCESS_ATTACH); end.