我做了一个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高分请来拿!
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高分请来拿!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货