全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2047
推到 Plurk!
推到 Facebook!

通过dll调用子窗口,出现灾难性故障的问题,请各位朋友e

尚未結案
nxwuyong
一般會員


發表:10
回覆:3
積分:2
註冊:2004-09-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-29 10:09:34 IP:211.93.xxx.xxx 未訂閱
我通过主程序利用dll调用子窗口,开始没有问题,子窗口可以出现,我没有对子窗口作任何操作就关闭该子窗口,然后再一次调用子窗口。这样调用操作l连续执行几次,结果报错: Project Project1.exe raised exception class EOleException with message '灾难性故障'Process stopped.Use Step or Run to continue. 主程序调用dll: 。。。。。。 DllFileName:=trim(DM.SQL_sys_menu.FieldValues['func_id']); DLLHandle:= LoadLibrary(Pchar(DllFileName)); if DLLHandle <> 0 then begin @ProcAddr := GetProcAddress(DLLHandle, 'CreateDllForm'); if @DLLForm <> nil then DLLForm := ProcAddr(Application, Screen ); end; 。。。。 dll程序: var DLLApp: TApplication; DllScr:TScreen; function CreateDllForm(ParentApplication: TApplication; Scr:TScreen):TForm; stdcall; //var //DllProc: Pointer; { Called whenever DLL entry point is called } begin Application:=ParentApplication; Screen :=Scr; Application.CreateForm(Tmenu_def_form,menu_def_form); result:=menu_def_form; end; procedure ExitDllForm(Reason: Integer); register; begin if Reason = DLL_PROCESS_DETACH then begin Application:=DLLApp; Screen:=DLLScr; end; end; exports CreateDLLForm; begin DLLApp:=Application; DLLScr:=Screen; DLLProc := @ExitDllForm; end. 子窗口close按钮直接close;关闭该窗口! 这个灾难性故障,为什么产生? 请各位朋友帮忙解决
Vicen
高階會員


發表:13
回覆:145
積分:151
註冊:2005-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-29 15:09:44 IP:221.226.xxx.xxx 未訂閱
你在主程序使用LoadLibrary后是否对其进行了释放?    建议这类程序使用下面结构编写,有LOAD/CREATE等就应该有对应的FREE或者DESTORY,申请内存操作时应该尤为注意:    
try
  DLLHandle:= LoadLibrary(PChar(DllFileName));  
  ......
finally
  FreeLibrary(DLLHandle);
end;
發表人 - Vicen 於 2005/03/29 15:15:13
系統時間:2024-04-29 13:49:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!