高分请教dll中数据模块的创建和释放方法,我的代码如下,出错,在释放的时候(200分)

W

wolfhe

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure form_show;
//jh_data为一个数据模块,其中包含socecktconnection
begin
try
showmessage('a');
if not assigned(jh_data) then
jh_data:=tjh_data.Create(nil);
showmessage('b');
//if not assigned(jh_zhukong) then
// jh_zhukong:=tjh_zhukong.Create(jh_zhukong);
showmessage('c');
// jh_zhukong.Hide;
showmessage('d');
//jh_zhukong.ShowModal;
showmessage('e');
finally
// freeandnil(jh_zhukong);
freeandnil(jh_data);//释放是地址访问错误,说访问00000000地址
end;

end;
 
我用DataModal时也出错,后来放到Form上,就好了。
 
1。在dll中建造数据模块datamodule容易出错,而且错误随机,同时在exe文件里面使用datamodule也出现一些非法访问错误,这可能是delphi内部问题或者第三方控件产生的,为了避免这类错误,建议不要使用数据模块datamodule,采用form封装需要的数据控件。
2。在dll中使用数据控件,需要自己建造数据窗体,两种方法:2.1在dll程序进入点创建,退出点释放,要保证这两个过程同时存在,在进入点创建时,保证owner为空,在退出点释放时保证application为原来的值(因为可能在会修改application的值)。2.2在dll中新建两个过程dlldata_create(app:tpplication);和dlldata_free;
并且export这两个函数,在用到数据控件窗口时,在主程序里调用create完成以后调用free,数据窗口控件的owner为application。
3。在使用mdi窗口分割程序的时候需要传递application对象和screen对象,同时mdichild窗口不能showmodal,所以在主程序里面不能使用行如:try
loadlibrary(dllname) ...finally freelibrary(dllname).这种方法。推荐使用静态调用,可以避免如何下手,动态调用灵活,但是在程序的最后来释放联接库是一件怎么都不觉得好的事情。
4。我的这些方法和问题都是基于d7版本的,我不知道是不是d7自己本身的问题。
 
自己解决了,呵呵,谢谢你的提醒,这种问题别人很少遇到么。知道怎么解决的送分给我
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
508
import
I
I
回复
0
查看
406
import
I
顶部