我是用dll封装mdi窗口,现在遇到两个问题,
1,点击菜单会重复加载,childcount一直为0。
2,时间长了去关闭窗口,会报地址错误。
我是用loadlibrary引用dll的,然后在dll文件里,
procedure dllunloadproc(reason : Integer);register;
begin
if (reason = dll_process_detach) or (reason = dll_process_attach) then
begin
dllapplacation := Applaction;
dllScreen := Screen;
end;
end;
1,点击菜单会重复加载,childcount一直为0。
2,时间长了去关闭窗口,会报地址错误。
我是用loadlibrary引用dll的,然后在dll文件里,
procedure dllunloadproc(reason : Integer);register;
begin
if (reason = dll_process_detach) or (reason = dll_process_attach) then
begin
dllapplacation := Applaction;
dllScreen := Screen;
end;
end;
解决方案 »
- delphi怎么表示unicode字符串常量?
- 如何在WebBrowser控件 当中设置不保存浏览记录
- 如何知道TClientDataSet.Delta数据集中每第记录是删除,修改或新增?
- 我想实现这样的功能(关于类)!!! 进来慢慢说...
- 组件与消息的问题!高手来看看
- [分享]DBGRIDEH 组件在Borland开发工具中应用全攻略
- 怎样截获窗体的隐藏消息,然后屏蔽掉?(高手来,UP有分)
- MM是怎样折磨交警的------没有笑死的站出来!!
- 改写TDBNavigator的btnclick事件
- 关于winsock 问题
- 問一個好基礎的問題,關於繼承的
- 不难也不简单的问题:如何求“123456789”中所有字节的和的最低8位(并转换成字符)。
var
Form1: TForm1;
DllProc: Pointer; { Called whenever DLL entry point is called }begin
Application:=ParentApplication; Form1:=TForm1.Create(ParentForm);
Form1.MyParentForm:=ParentForm;
Form1.MyParentApplication:=ParentApplication;
// windows.SetParent(Form1.Handle,ParentForm.Handle);
// Form1.FormStyle:=fsMDIChild;
Form1.Show;
end;procedure DLLUnloadProc(Reason: Integer); register;
begin
if Reason = DLL_PROCESS_DETACH then Application:=DllApplication;
end;
Form1.MyParentApplication:=ParentApplication;这个比PARENTFORM多了一个保存旧有PARENTFORM的过程。
2. 时间长了关闭报错,时间短了不报吗?没道理吧?肯定还是操作中创建了什么没有释放吧!
是真的,时间长了,关闭的时候就报错,如果你再引用一下这个dll,就不会报错,但时间长了又出错了
我是这样写的。
var
DllApplication:TApplication;
DllScreen:TScreen;
{$R *.res}
procedure DllUnLoadProc(Reason: Integer);register;
begin
if (Reason = DLL_PROCESS_DETACH) or (Reason = DLL_THREAD_DETACH)then
begin
Application := DllApplication;
Screen := DllScreen;
end;
end;
exports Show_Form;begin
DllApplication := Application;
DllScreen := Screen;
DllProc := @DLLUnloadProc;
end.