DLL经典问题,可惜我不会!(100)

rainxy2000 2002-03-25 03:13:53
为什么我在使用DLL封装MDI子窗体,前面运行都没有问题,可是
一退出就会出现内存错误???(使用静态调用,动态的也试过不行)
看到TDEBUG中出错是在TObject.Free段中,我查了各论坛,好像是
Delphi中的堆栈问题,各大侠有没有什么好方法帮助在下?多谢!

library AssModal;
uses
...
var
DllApp:TApplication;

Function AssCall(App:TApplication;FuncID:Integer;Login_Frm:TLogin_Frm):Boolean;stdcall;
Begin
...
Application:=App;
Form1:=TForm1.Create(App.MainForm);
End;

procedure DLLUnloadProc(Reason : Integer);
begin
if Reason = DLL_PROCESS_DETACH then Application := DLLApp;
End;

Exports AssCall;

Begin
DllApp:=Application;
DLLProc := @DLLUnloadProc;
End;
...全文
29 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cly402 2002-06-05
  • 打赏
  • 举报
回复
你在主程序调用动态连接库后有没有freeLibrary();如果有,去掉看看。。。
cly402 2002-05-31
  • 打赏
  • 举报
回复
应该传递主窗体的Thandle,不要传递Application。
Liusp 2002-03-29
  • 打赏
  • 举报
回复
应该不要给子窗体的Parent付值
newwen 2002-03-29
  • 打赏
  • 举报
回复
Action := caFree;
我的程序没错啊!
不过我到是经常碰到子窗体中的控件no parent window的错误,是在给子窗体的parent付值后才会出现,不付值不会,另外即使是有此错误时取得的控件的parent.Handle和该控件的父控件的Handle也是一样的,奇怪!
cxjcsdn 2002-03-29
  • 打赏
  • 举报
回复
^
wenzm 2002-03-29
  • 打赏
  • 举报
回复
Form1:=TForm1.Create(App.MainForm)动态产生的,应该Action := caFree;
吧!!!
Liusp 2002-03-29
  • 打赏
  • 举报
回复
DLL:MDI子窗体应释放,在OnClose事件中加上如下代码:

Action := caFree;

宿主程序中,接收DLL的句柄最好定义为全局变量,在宿主程序关闭时才释放该句柄
GoodHope 2002-03-25
  • 打赏
  • 举报
回复
你用的是Delphi6吧?Delphi6中好像是DLL在卸载的时候DLLProc也不能执行了。还是推出前,显式恢复DLL中的Application吧。或者干脆用包吧。

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧