主form 是mdi的,在这里打开一个子form是chi的
子form封装在dll中,我用这样的方法调用的
var
HDLL:THandle;
Showset:TShowset;
begin
HDLL:=LoadLibrary('sysset.dll');
try
@Showset:=GetProcAddress(HDLL,'showset');
if Assigned(@Showset) then
Showset(Application.Handle);
except  //--------------------------这里用except的话,DLL中调用的form 关闭后,dll不能FreeLibrary(HDLL);
//可是要是用finally的话,DLL中一show的话,就马上执行到了FreeLibrary(HDLL);
//这里怎么办
FreeLibrary(HDLL);
end;DLL文件里我是这样写的
implementation
{$R *.dfm}
Procedure showset(AHandle:THandle);
var
  fset: Tfset;
  begin
Application.Handle:=AHandle;
fset:=Tfset.Create(Application);
try
fset.Show;
Except
fset.Free;
//goset:=nil;
end;
end;
我胡涂了,真不知道怎么做好
主要问题是:
1:DLL里写的showset过程的try...何except不分,因为是show的,所以应该在show出来的
form关闭有有类似fset.free的操作,可是只是简单的在form的close事件里写上Form.free
则不正确,怎么确保关闭后这个步骤的form及时free掉,还是,没有必要那
2:调用dll的form的那一步,上面HDLL:=LoadLibrary('sysset.dll')...那里,因为主
窗口是mdi的,dll中的是cli的,如果用except,则能够显示出来,如果是finally的话,就是
一显示,就马上释放了,既然是mdi何cli的方式,这里应该怎么办啊
3:为什么我的主窗口是用mdi的,DLL里的form是cli,当调用DLL的form时提示错误
Access violation at address 00403b44 in module 'project1.exe'. read of address 00000000