请分析??(功能是将目录下的DLL全部调用到程序中,但是可以运行,调用后出错,好象是内存包错!
  private
    { Private declarations }
    procedure LoadPlugIns;
    procedure FreePlugIns;
    procedure PlugInClick(Sender: TObject);  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}var
  plugins: TList;
type
  //plug in object
  TSendMessagesPlugIn = class
  Name: String;
  Address: Integer;
  Call: Pointer;
  end;
  GetNameFunction = function : PChar;
  SendMessageFunction = function (AutoSend:Boolean):Boolean;var
  StopSearch: Boolean;procedure SearchFileExt(const Dir, Ext: String; Files: TStrings);
var
  Found: TSearchRec;
  i : Integer;
  Dirs: TStrings; //Store sub-directories
  Finished : Integer; //Result of Finding
begin
  stopSearch := False;
  Dirs := TStringList.Create;
  Finished := FindFirst(Dir + '*.*', 63, Found);
  while (Finished = 0) and not (StopSearch) do
  begin
    if (Found.Name[1] <> '.') then
    begin
      if (Found.Attr and faDirectory = faDirectory) then
       Dirs.Add(Dir + Found.Name)  //Add to the directories list.
      else
       if Pos(UpperCase(Ext), UpperCase(Found.Name))>0 then
          Files.Add(Dir + Found.Name);
    end;
    Finished := FindNext(Found);
  end;
  FindClose(Found);
  if not StopSearch then
    for i := 0 to Dirs.Count - 1 do
      SearchFileExt(Dirs[i], Ext, Files);
  Dirs.Free;
end;
procedure TForm1.XP_Button4Click(Sender: TObject);
var
  dd:tpoint;
begin
  getcursorpos(dd);
  pm.Popup(dd.x,dd.y);
end;procedure TForm1.LoadPlugIns;
var
  Files: TStrings;
  i: Integer;
  TestPlugIn : TSendmessagesPlugIn;
  NewMenu: TMenuItem;
begin
  Files := TStringList.Create;
  Plugins := TList.Create;
  SearchFileExt(ExtractFilepath(Application.Exename), '.dll', Files);
  for i := 0 to Files.Count-1 do
  begin
    //create a new plug in
    TestPlugIn := TsendmessagesPlugIn.Create;
    TestPlugIn.Address := LoadLibrary(PChar(Files[i]));
    //get the a menu item
    TestPlugIn.Name := GetNameFunction(GetProcAddress(TestPlugIn.Address, 'GetName'));
    //get the function insert text
    TestPlugIn.Call := GetProcAddress(TestPlugIn.Address, 'SendMessages');
    PlugIns.Add(TestPlugIn);
//add the plug menu item
    NewMenu := TMenuItem.Create(Self);
    NewMenu.Caption := TestPlugIn.Name;
    NewMenu.OnClick := PlugInClick;
    NewMenu.Tag := i;
    pm1.Add(NewMenu);
  end;
  Files.Free;
end;procedure TForm1.FreePlugIns;
var
  i: Integer;
begin
  for i := 0 to PlugIns.Count-1 do
  begin
   //free every loaded plugins
    FreeLibrary(TSendmessagesPlugIn(PlugIns[i]).Address);
  end;
PlugIns.Free;
end;procedure TForm1.PlugInClick(Sender: TObject);
var
  pp:boolean;
begin
  pp:=SendMessageFunction(TSendmessagesPlugIn(PlugIns[TMenuItem(Sender).Tag]).Call)(false);
  if pp then
    showmessage('Successfully')
  else
    showmessage('Error!');
  end;procedure TForm1.FormCreate(Sender: TObject);
begin
  LoadPlugIns;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
    freePlugIns;
end;end.