我做了一个DBSearch.dll,其中有个名为Search的function:function Search(keywork: PChar):Integer;StdCall;
begin
  DataModule1 := TDataModule1.Create(Application);
  with DataModule1 do
    begin
       执行sql.....
       做相应的操作.....
    end;
  DataModule1.free;
end;应用程序不断的调用Search会产生EComponentError,主要原因是因为新建的组件和已存在的组件重名,也就是说我的DataModule1.free还没有做,又执行DataModule1 := TDataModule1.Create(Application);没有办法,只有对其进行调整,想法是在dll被调用的时候就先Application.CreateForm(TDataModule1, DataModule1);程序就改为了:function Search(keywork: PChar):Integer;StdCall;
begin
  with DataModule1 do
    begin
       执行sql.....
       做相应的操作.....
    end;
end;
Exports
  Search;begin
  Application.CreateForm(TDataModule1, DataModule1);
end.这样到是不会出现EComponentError错误了,但新的问题又出现了:应用程序在退出的时候会产生地址访问错误,因为在dll结束调用后我并没有:TDataModule1.free请问各位有什么办法很好的解决这个问题?说明:a.exe调用了DBSearch.dll,同时a.exe还调用了一个other.dll并且这个other.dll也调用了DBSearch.dll高分请来拿!