当前位置:主页>仓库管理软件> 列表

来、来、来 DLL 高手请进来,100分就为个明白 找下载金蝶财务软件

记账软件版1楼: 我的原贴地址
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3106122
请先看看原贴再回答

1、为什么我传 application.handle 不行,而传 handle 就没有问题。
2、application.handle 和 handle(这个应该是 self.handle)有什么区别
3、我的程序为什么会最小化呢?
4、在 dll 出口处我也试着加了加 application.handle:=0 ,但还有问题。

如果您觉得分少的话,还可以再开贴吗
谢谢了

2楼: 没有人知道吗? 如财务软件有哪些

3楼: Handle我也遇见过,
其实application.handle Mainform.handle都不对,
只能写handle.
我转换了一下,发现这三个HANDLE不同。
application.handle应该与李维说的DELPHI的原理说过。
但是MAINFORM就不知道了。
后来我感觉handle. 是self.handle
也就是handle=self.handle<>application.handle<>mainform.handle.

4楼: 谢谢
看了看书,发现都是用的 application.handle ,但为什么我这个就不行呢?还有一个很怪的问题是,别的 dll 传 application.handle就没问题,而我的这个就不行?代码都一样呀?很郁闷。


self.handle 是 form 里的 handle ,我也知道这个 handle 与 application.handle 以及 mainForm 里的 handle 不一样
可就不明白为什么会出问题。
再次感谢

5楼: 回答:
1. 按理应该是传Application.Handle。你说的“传Application.Handle不行,传Handle没有问题”是是因为DLL里面的问题造成的,解决了DLL里面的问题就不会发生这种情况了。
2. Application.Handle和Handle当然有区别了:Application.Handle是你的主调程序的句柄,而Handle是具体发出调用命令的窗口(除非你做的是控制台程序咯,但看你给出的主调程序又不像)的句柄。因为按理来说应该是主程序调用DLL,而不是程序里面的某个窗口调用DLL,所以应该传Application.Handle,而不是Handle。
3. 程序最小化是因为调用DLL里面创建的窗口没有被释放。如果DLL窗口没有释放的话,在主调程序那里用FreeLibrar卸载DLL就会出问题了。
4. 在DLL出口那里不应该给Application.Handle赋值为0。因为这里的这个Application.Handle指的是DLL自己的Application的句柄,所以正确的做法应该是在DLL的crForm函数里面同步主调程序的句柄之前先保存DLL自己的Application.Handle,然后在DLL出口那里恢复这个句柄。

6楼: TO 李奇

"1. 按理应该是传Application.Handle。你说的“传Application.Handle不行,传Handle没有问题”是是因为DLL里面的问题造成的,解决了DLL里面的问题就不会发生这种情况了。"
dll 时就显示窗体,关闭窗体,没有什么问题呀。代码你应该看了吧?很简单的几句。

"2. Application.Handle和Handle当然有区别了:Application.Handle是你的主调程序的句柄,而Handle是具体发出调用命令的窗口(除非你做的是控制台程序咯,但看你给出的主调程序又不像)的句柄。因为按理来说应该是主程序调用DLL,而不是程序里面的某个窗口调用DLL,所以应该传Application.Handle,而不是Handle。"

谢谢


3. 程序最小化是因为调用DLL里面创建的窗口没有被释放。如果DLL窗口没有释放的话,在主调程序那里用FreeLibrar卸载DLL就会出问题了。

可为什么传 handle 就同问题了呢?


4. 在DLL出口那里不应该给Application.Handle赋值为0。因为这里的这个Application.Handle指的是DLL自己的Application的句柄,所以正确的做法应该是在DLL的crForm函数里面同步主调程序的句柄之前先保存DLL自己的Application.Handle,然后在DLL出口那里恢复这个句柄。

我也这么试过,但不行。

记账软件版7楼: 继续顶呀~
(系统说我灌水~)

8楼: 我说的DLL里面的问题就是指DLL窗体没有被释放,总之在FreeLibrary之前一定要将DLL创建的窗口释放掉。解决了这个问题其他的就不是问题了。

9楼: 谢谢,我试试

10楼: 我试了,我在 onclose 里加上 action:=cafree ,可还是不行


传 application.handle 依旧会最小化, 传 handle 没问题

11楼: 问题解决了

12楼: To qi_jianzhou:
DLL里面创建的窗口是不能用OnClose事件的Action参数释放的。
正确的释放方法是这样--FreeAndNil(窗口对象); 如下载金蝶财务软件