主题:关于对象内存释放(精彩出现在B1出来之后);日期:2004-11-19 09:00:00;内容提要:如果判断一个窗体已经建立了;重新认识对象

简介: 主题:关于对象内存释放(精彩出现在B1出来之后)主讲人:B1日期:2004-11-19 09:00:00内容提要:如果判断一个窗体已经建立了;重新认识对象 2004-11-19 09:04:37 /:>D10.

主题:关于对象内存释放(精彩出现在B1出来之后)
主讲人:B1
日期:2004-11-19 09:00:00
内容提要:如果判断一个窗体已经建立了;重新认识对象

2004-11-19 09:04:37 /:>D10.天地弦(185511468)
A4在哪里

2004-11-19 09:05:43 Crystal(154571668)

2004-11-19 09:06:31 /:>D10.天地弦(185511468)
问个问题行不?

2004-11-19 09:08:29 /:>D10.天地弦(185511468)
如果判断一个窗体已经建立了

2004-11-19 09:09:26 /:>D10.天地弦(185511468)
我用
if not Assigned(Form1) then
  Form1 := TForm1.Create(Application)

2004-11-19 09:09:52 /:>D10.天地弦(185511468)
A4,有没有看我的问题

2004-11-19 09:10:40 B4.松鼠(64652023)
aasigned行不?

2004-11-19 09:10:49 /:>D10.天地弦(185511468)
要用哪个

2004-11-19 09:11:09 B9.&紫风铃&(512551)
可以啊

2004-11-19 09:11:09 /:>D10.天地弦(185511468)
我在OnDestory里写了
Inherited Destory()
self := nil;

2004-11-19 09:11:16 B9.&紫风铃&(512551)
释放?

2004-11-19 09:11:30 Crystal(154571668)
if form1<>nil then

2004-11-19 09:11:45 B9.&紫风铃&(512551)
也可以

2004-11-19 09:12:05 /:>D10.天地弦(185511468)
for1<>nil
和 not Assigned(Form1)
是一样的吧

2004-11-19 09:12:46 大羽(393921295)
一样

2004-11-19 09:13:01 Crystal(154571668)
我一般是那样写的

2004-11-19 09:13:07 /:>D10.天地弦(185511468)
嗯,那
if form1<>nil then 还不是一样的

2004-11-19 09:13:24 大羽(393921295)
你把窗体freeandnil的话

2004-11-19 09:13:38 /:>D10.天地弦(185511468)
是Mdi子窗体

2004-11-19 09:13:40 大羽(393921295)
用assigned判断没问题

2004-11-19 09:14:02 /:>D10.天地弦(185511468)
mdi子窗体怎么样FreeAndNil?

2004-11-19 09:14:12 大羽(393921295)
mdi子窗体?

2004-11-19 09:14:20  &PassWorld(3569555)
MDI子窗体是不是动态创建的?

2004-11-19 09:14:37 /:>D10.天地弦(185511468)
不是

2004-11-19 09:15:05  &PassWorld(3569555)
不是动态创建,请编写MDI子窗体的OnClose方法,直接写入Close或Action:=caFree;即可。

2004-11-19 09:15:33 大羽(393921295)
我用 action =cafree

2004-11-19 09:15:57 大羽(393921295)
action =cafree 好像全都放掉了

2004-11-19 09:16:09  &PassWorld(3569555)
不全部放掉,难道还要。。。?

2004-11-19 09:17:01 大羽(393921295)
不在于判断,而是释放掉了,没内存泄漏就可以

2004-11-19 09:17:07 /:>D10.天地弦(185511468)
大羽,你试过/

2004-11-19 09:17:40 /:>D10.天地弦(185511468)
总觉得好像释放窗体没有全部释放一样

2004-11-19 09:17:45 大羽(393921295)
是阿,如果有内存泄漏,用assigned没用

2004-11-19 09:17:47 B3.Locet(2212967)
用cafree,内存也不会减少~

2004-11-19 09:18:16 大羽(393921295)
奥,那应当?

2004-11-19 09:18:46  &PassWorld(3569555)
用FREE就释放了,用CLOSE还没有释放。

2004-11-19 09:18:51 /:>D10.天地弦(185511468)
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  action := cafree;
end;

2004-11-19 09:18:58  &PassWorld(3569555)
没错。

2004-11-19 09:19:01 /:>D10.天地弦(185511468)
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not assigned(Form2) then
  begin
    Form2 := TForm2.Create(self);
    Form2.Show();
  end;
end;

2004-11-19 09:19:05 /:>D10.天地弦(185511468)
这样还是只能建立一次

2004-11-19 09:19:13 Crystal(154571668)
没有错啊

2004-11-19 09:19:23 /:>D10.天地弦(185511468)
你说Form2在OnClose的时候有完全释放吗?

2004-11-19 09:19:33 B3.Locet(2212967)
想不出来`````怎么释放内存`

2004-11-19 09:19:47 /:>D10.天地弦(185511468)
185511468([:>]D10.天地弦) 09:24:50
你说Form2在OnClose的时候有完全释放吗?==>有错

2004-11-19 09:20:01 /:>D10.天地弦(185511468)
反正,Form2没有完全释放 <--(哎不懂的人就是这样:(

2004-11-19 09:20:02 B3.Locet(2212967)
D10,你关闭子窗口,看一下内存有没有减少

2004-11-19 09:20:12 大羽(393921295)
FREE就释放了?但是会内存泄漏阿

2004-11-19 09:20:26  &PassWorld(3569555)
你应该这样。
procedure MyFormClose(Sender: TObject; var Action: TCloseAction);
begin
if Assigned(Form2) then
  FreeandNil(Form2);
end;

在事件里面写
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not assigned(Form2) then
  begin
    Form2 := TForm2.Create(self);
    Form2.Onclose:=MyFormClose;
    Form2.Show();
  end;
end;

看能不能解决你的问题??

2004-11-19 09:20:31 /:>D10.天地弦(185511468)
没有哦

2004-11-19 09:20:44 /:>D10.天地弦(185511468)
MyFormClose,在TForm1里写

2004-11-19 09:21:08  &PassWorld(3569555)
不是自己定义一个TCloseNotifyEvent的函数,然后定义给Form2的OnClose

2004-11-19 09:21:25  &PassWorld(3569555)
procedure MyFormClose(Sender: TObject; var Action: TCloseAction);这个函数是你定义的。

2004-11-19 09:21:50  &PassWorld(3569555)
    Form2.Onclose:=MyFormClose;
用这句话把它们联系起来就可以在Form1里面控制Form2的释放相关。
 

2004-11-19 09:21:51 B4.松鼠(64652023)
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  action := cafree;
  Form2:=nil;
end;
行吗?

2004-11-19 09:22:00 /:>D10.天地弦(185511468)
在Form1上,和在Form2上写有什么不一样

2004-11-19 09:22:08  &PassWorld(3569555)
你自己体会一下就明白了。

2004-11-19 09:22:38  &PassWorld(3569555)
这样很灵活。比如你有许多相同接口的Form.要显示的时候就不需要使用全局变量

2004-11-19 09:22:59 B3.Locet(2212967)
嗯```这时应该用self

2004-11-19 09:23:15 /:>D10.天地弦(185511468)
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  action := cafree;
  self:=nil;
end; 

2004-11-19 09:24:47 B1.斜阳(249208513)
最好不要在FormClose中让Self为nil  <---------,精彩即将开始。B1参加。

2004-11-19 09:24:55 B9.&紫风铃&(512551)

2004-11-19 09:24:59  &PassWorld(3569555)
我也觉得,否则会有AV错误。

2004-11-19 09:25:33 /:>D10.天地弦(185511468)
B1你说在哪里写上

2004-11-19 09:26:11 B1.斜阳(249208513)
在哪里你也不要写

2004-11-19 09:26:16 /:>D10.天地弦(185511468)
B老大

2004-11-19 09:26:36 /:>D10.天地弦(185511468)
那怎么办?

2004-11-19 09:26:38 B1.斜阳(249208513)
听起来好像怪怪的噢

2004-11-19 09:27:08 /:>D10.天地弦(185511468)
B1,这样叫吧,还是

2004-11-19 09:27:33 B1.斜阳(249208513)
对self的操作不是用户改干的工作,是TObject的任务,在TObject释放的时候,他会帮你将self设置为nil的

2004-11-19 09:28:17 B1.斜阳(249208513)
其实,你的目的也不是把self设置为空,而是要把哪个类似Form1的那个引用设置为nil,是吧

2004-11-19 09:28:24 /:>D10.天地弦(185511468)
assigned(form2)是不是判断Form2有没有建立?

2004-11-19 09:28:34  &PassWorld(3569555)
Form2<>nil

2004-11-19 09:28:37 /:>D10.天地弦(185511468)
这个对象,Form2

2004-11-19 09:28:56 /:>D10.天地弦(185511468)
passworld这样是一样的

2004-11-19 09:29:02 /:>D10.天地弦(185511468)
B1,是那个意思

2004-11-19 09:29:40 B1.斜阳(249208513)
如果你要把Form2=nil那最好在窗体的FormDestroy直接写入Form2=nil而不是self=nil

2004-11-19 09:30:54 /:>D10.天地弦(185511468)
是的设Self:=nil不行,设Form2:=nil可以,

2004-11-19 09:31:21 /:>D10.天地弦(185511468)
在Form2Destory里Self 难道和Form2是不一样的?

2004-11-19 09:31:42 B3.Locet(2212967)
我觉得都可以````
Form1:=Tform1.create;
这个不是建立了一个Tform1的实例吗?

2004-11-19 09:31:57 B3.Locet(2212967)
如果用self.free,这是关闭的是Form1的

2004-11-19 09:32:45 B1.斜阳(249208513)
话虽然这么说,但是你却不能在一个类中将self:=nil

2004-11-19 09:33:27 B1.斜阳(249208513)
self和Form2根本就是两个变量啊

2004-11-19 09:33:40 /:>D10.天地弦(185511468)
为什么Form2.Free,不能把Form2释放干净呢

2004-11-19 09:34:46 B1.斜阳(249208513)
Form2是一个占4个字节的变量,不要搞混了噢

2004-11-19 09:34:58 /:>D10.天地弦(185511468)
B1,你是怎样释放窗体的

2004-11-19 09:35:22 B1.斜阳(249208513)
Form2.Close;
FreeAndNil(Form2);

2004-11-19 09:35:34 B3.Locet(2212967)
嗯````他指向Tform2的一个实例,对不

2004-11-19 09:35:41 /:>D10.天地弦(185511468)
那Form2如果是MDI子窗体呢/

2004-11-19 09:35:54 /:>D10.天地弦(185511468)
2212967(B3.Locet) 09:35:34
嗯````他指向Tform2的一个实例,对不 --->???

2004-11-19 09:37:25 B1.斜阳(249208513)
TForm2.Create这条语句在内存中创建了一个类,这个类在内存中有一个位置,只要我高兴,我可以将100个指针变量指向这个位置。Form2.Free只是通知内存中的类释放自己占用的内存,但是,没有义务通知我那100个指针变量置nil啊

2004-11-19 09:38:48 /:>D10.天地弦(185511468)
那也没有义务通知Form2置为nil!

2004-11-19 09:39:51 B1.斜阳(249208513)
是的是的,孺子可教[:D]

2004-11-19 09:39:52 /:>D10.天地弦(185511468)
明了一点,[share],谢谢B1老大。

2004-11-19 09:41:57 B3.Locet(2212967)
那请问``
form2:=TForm2.create;
Form3:=TForm2.create;这到底在Tform2里是怎么样的?

2004-11-19 09:42:27 /:>D10.天地弦(185511468)
2212967(B3.Locet) 09:41:57
那请问``
这到底在Tform2里是怎么样的? ==>?

2004-11-19 09:42:28 B4.松鼠(64652023)
form2,Form3只是变量

2004-11-19 09:43:14 /:>D10.天地弦(185511468)
Form2-->|对象|

2004-11-19 09:43:34 /:>D10.天地弦(185511468)
Form2-->|对象:TForm2|  <--我说的不太准,下面有更清晰的,看B1的图

2004-11-19 09:44:04 B1.斜阳(249208513)
举个简单的例子:
var
  pi,pj: ^Integer;
begin
  New(pi);
  Pi^ = 3;
  pj = pi;
  Dispose(Pi)
   ...
end;
你说这时候,pj是nil吗》

2004-11-19 09:44:12 B3.Locet(2212967)
不是创建一个Tform2的实例吗?

2004-11-19 09:44:52 B1.斜阳(249208513)
form2:=TForm2.create;
Form3:=TForm2.create;这到底在Tform2里是怎么样
你创建了两个TForm2类

2004-11-19 09:45:05 B1.斜阳(249208513)
的实例

2004-11-19 09:45:52 /:>D10.天地弦(185511468)
Form2和Form3都是一个实例,占两块同样的内存

2004-11-19 09:45:58 /:>D10.天地弦(185511468)
B1,上面是nil

2004-11-19 09:47:32 B1.斜阳(249208513)
在我上面说的那个例子中,pj不是nil,pj中依然保存着一个数字,这个数字是原来指向动态分配的那个整数的内存地址,虽然这个地址被别人释放了,但是pj中依然保存这这个数字

2004-11-19 09:48:01 /:>D10.天地弦(185511468)
你说pj?

2004-11-19 09:48:08 /:>D10.天地弦(185511468)
我还以为你说pi

2004-11-19 09:48:35 B1.斜阳(249208513)
是的,我说的是pj

2004-11-19 09:48:45 /:>D10.天地弦(185511468)
没看到

2004-11-19 09:49:12 /:>D10.天地弦(185511468)
下次要写jp,呵呵,不容易看错
 

2004-11-19 09:49:14 B1.斜阳(249208513)
这就和你说的form2=TForm2.Create(nil);然后
form3 = form2是一样的

2004-11-19 09:50:19 B1.斜阳(249208513)
但是如果
form2=Tform2.Create(nil)
form3=Tform2.Create(nil)
那么,Form2和Form3互不影响

2004-11-19 09:50:21 /:>D10.天地弦(185511468)
249208513(B1.斜阳) 09:49:14
这就和你说的form2=TForm2.Create(nil);然后
form3 = form2是一样的 ==>Form3和Form2不是指象同一块内存?

2004-11-19 09:50:32 B1.斜阳(249208513)
是的

2004-11-19 09:50:56 /:>D10.天地弦(185511468)
249208513(B1.斜阳) 09:49:14
这就和你说的form2=TForm2.Create(nil);然后
form3 = form2是一样的 ==>Form3和Form2不是指象同一块内存? Form2.Free了Form3应该也Free了吧

2004-11-19 09:51:42 B1.斜阳(249208513)
确切说是Form2和Form3指向的那个类的实例被释放了

2004-11-19 09:51:56 /:>D10.天地弦(185511468)
嗯,

2004-11-19 09:52:22 A1.Aleyn.wu(45198124)
Form2和Form3可以看成是 THandle

2004-11-19 09:52:41 B1.斜阳(249208513)
但是Form2和Form3本身依然存在,并且这两个变量中依然保存着原来的地址的值

2004-11-19 09:52:46 B3.Locet(2212967)
D10,都是指向同一个地址了,那怎么把这块地址释放掉了?

2004-11-19 09:53:12 B1.斜阳(249208513)
这两个变量在内存中分别占用4个字节

2004-11-19 09:53:14 /:>D10.天地弦(185511468)
你是说要怎样释放那块内存?

2004-11-19 09:53:32 /:>D10.天地弦(185511468)
你Form2.Free或者Form3.Free都可以释放

2004-11-19 09:54:48 /:>D10.天地弦(185511468)
B3明了?

2004-11-19 09:55:33 B3.Locet(2212967)
那是说,他占的内存并没有释放~对不?

2004-11-19 09:55:46 /:>D10.天地弦(185511468)
释放了呢

2004-11-19 09:55:57 B1.斜阳(249208513)
_______    |----------|    ________
|form2|--> |TForm2的  | <--|Form3 |
-------    |一个实例  |    --------
           |......... |
           |          |

2004-11-19 09:56:00 /:>D10.天地弦(185511468)
249208513(B1.斜阳) 09:53:12
这两个变量在内存中分别占用4个字节 

2004-11-19 09:56:05 B1.斜阳(249208513)
呵呵,这个形象不?

2004-11-19 09:56:10 /:>D10.天地弦(185511468)
嗯形象

2004-11-19 09:56:15  &PassWorld(3569555)
B1确实专业

2004-11-19 09:56:25 B1.斜阳(249208513)
Form2.Free只是释放了中间的部分,但是两本的部分依然存在

2004-11-19 09:56:38 /:>D10.天地弦(185511468)
只是Form2和Form3这两个变量还不是nil

2004-11-19 09:56:48 /:>D10.天地弦(185511468)
249208513(B1.斜阳) 09:53:12
这两个变量在内存中分别占用4个字节 

2004-11-19 09:57:11 B3.Locet(2212967)
我说的是这个实例的内存怎么释放

2004-11-19 09:57:35 /:>D10.天地弦(185511468)
Form2.Free,Form3.Free都可能

2004-11-19 09:57:39 B1.斜阳(249208513)
Form2.Free或者Form3.Free据可以了

2004-11-19 09:57:45 /:>D10.天地弦(185511468)
可以

2004-11-19 09:57:47 /:>D10.天地弦(185511468)
不是可能

2004-11-19 09:58:15 B3.Locet(2212967)
但内存是没有减少的```指的是不是,这个实例还在内存之中

2004-11-19 09:58:26 /:>D10.天地弦(185511468)
有呢

2004-11-19 09:59:32 /:>D10.天地弦(185511468)
B3,回头把记录,看一看,会明的

2004-11-19 09:59:41 /:>D10.天地弦(185511468)
要不要我把笔记整理出来

2004-11-19 09:59:49 B3.Locet(2212967)
5555```没``那个已经听懂了```可我现在想的是把内存也释放掉

2004-11-19 10:00:18 B3.Locet(2212967)
不要不要```我出丑了呢``[:$]

2004-11-19 10:00:20 /:>D10.天地弦(185511468)
实例的内存已经释放了

2004-11-19 10:00:34 /:>D10.天地弦(185511468)
呵呵,我经常出丑 <--不出丑怎么会进步,呵呵

2004-11-19 10:00:36 B3.Locet(2212967)
没有``你可以查一下内存就知道了```

2004-11-19 10:00:44 /:>D10.天地弦(185511468)
A1,老说我笨

2004-11-19 10:01:01 /:>D10.天地弦(185511468)
那叫B1再出来说说

2004-11-19 10:01:31 B3.Locet(2212967)
我做了个例子,用管理器看,是没有减少

2004-11-19 10:01:57 B1.斜阳(249208513)
唉!再说一遍基础知识:类本身在你声明的时候就已经是一个存在的实体了,这个类好比就是一个模具;类的实例是需要在调用 类.Create  (例如TForm.Create)才会在内存中依照那个类的模具被创造出来

2004-11-19 10:03:22 B1.斜阳(249208513)
form2=TForm2.Create表示依照TForm2的样子创建一个实例,并且让Form2这个变量指向这个刚刚创建的实例的首地址

2004-11-19 10:03:58 B1.斜阳(249208513)
如故你想释放这个实例所占用的内存,那么form2.Free就可以办到了

2004-11-19 10:04:03 /:>D10.天地弦(185511468)
B3听明了?

2004-11-19 10:04:08  &PassWorld(3569555)
面向对象最基础的知识汗。

2004-11-19 10:04:31 /:>D10.天地弦(185511468)
但是这些基础知识往往很多人不知道

2004-11-19 10:04:38 B1.斜阳(249208513)
希望这是最后一次打这些字

2004-11-19 10:05:49  &PassWorld(3569555)
总而而之,统而言之,FREE就可以了。
 
2004-11-19 10:07:49 /:>D10.天地弦(185511468)
可能不行哦B3

2004-11-19 10:08:02 B3.Locet(2212967)
做成DLL一定可以

2004-11-19 10:08:38 /:>D10.天地弦(185511468)
B1,你先休息一下,

2004-11-19 10:08:53 /:>D10.天地弦(185511468)
A帮老大,你可不可以出来讲讲

2004-11-19 10:09:27 B1.斜阳(249208513)
在这里有个小问题需要注意的是:Form2.Free只是将类的实例释放掉了,但是却没有释放Form2本身

2004-11-19 10:09:42  &PassWorld(3569555)
在这里有个小问题需要注意的是:Form2.Free只是将类的实例释放掉了,但是却没有释放TForm2本身 

2004-11-19 10:09:58  &PassWorld(3569555)
如果是类就是TForm2当然没有释放,如果是实例如Form2,Form3都可以。指清楚就完了。

2004-11-19 10:11:17 B1.斜阳(249208513)
换句话说,比如:Tform2.Create的返回值是$12345,那么Form2保存的就是$12345这个数字,Form2.Free只是释放了$12345这个位置的内存,但是Form2中依然是$12345

2004-11-19 10:11:20 /:>D10.天地弦(185511468)
如果要释放必须Form2:=nil

2004-11-19 10:11:56  &PassWorld(3569555)
大家请参考这篇贴子。
http://www.01cn.net/cgi-bin/topic_show.cgi?id=1073&h=1&bpg=1&age=0

2004-11-19 10:13:07 /:>D10.天地弦(185511468)
A1,B1,C1 ,你们有把Mdi子窗体封装到DLLkh 

2004-11-19 10:13:26 B1.斜阳(249208513)
没有试过

2004-11-19 10:13:27 /:>D10.天地弦(185511468)
A1,B1,C1 ,你们有把Mdi子窗体封装到DLL中

2004-11-19 10:13:40  &PassWorld(3569555)
D10,关于把DLL窗体封装到DLL中,盒子上有相当好的解决办法。

2004-11-19 10:13:49 /:>D10.天地弦(185511468)
哪有

2004-11-19 10:15:12  &PassWorld(3569555)
http://www.delphibox.com/article.asp?articleid=836

2004-11-19 10:15:54 /:>D10.天地弦(185511468)
passworld,我问问就行了

2004-11-19 10:15:57 /:>D10.天地弦(185511468)
你有下吧

2004-11-19 10:16:02 /:>D10.天地弦(185511468)
是不是带包?

2004-11-19 10:17:06  &PassWorld(3569555)
我早下了。看了一下子。封装得还不错。就是我给你提的那个
OnClose:=MyCloseForm
大体是这样动态绑定

2004-11-19 10:21:55 /:>D10.天地弦(185511468)
通过消息来释放

2004-11-19 10:24:28 /:>D10.天地弦(185511468)
passworld

2004-11-19 10:24:38  &PassWorld(3569555)
??

2004-11-19 10:24:59 /:>D10.天地弦(185511468)
我觉得窗体中的消息在OnDesotry里发要好一点

2004-11-19 10:25:33 /:>D10.天地弦(185511468)
你认为呢

/*******
如果要将消息写在OnDestory里还要做工作。要先在Onclose里写上action:=caFree;
还要修改这个
function Closefrm: LongInt; stdcall;
begin
//showmessage('begin');
  if assigned(Frm) then
  begin
   //showmessage('ok');
    frm := nil;
   // FreeAndNil(Frm);//如果还用的话,还会free一次,就会出错。对象实例已经Free了
   //showmessage('over');
  end;
  Result := 0;
end;
/*******

2004-11-19 10:25:38  &PassWorld(3569555)
OnDesotry和OnClose有先后之分。
OnDestory发生在Close之后。

2004-11-19 10:25:44  &PassWorld(3569555)
可以看看VCL源码。

2004-11-19 10:26:11 /:>D10.天地弦(185511468)
嗯,是发生在Onclose之后,

2004-11-19 10:26:21 /:>D10.天地弦(185511468)
所以我认为在OnDestory里要好

2004-11-19 10:26:53  &PassWorld(3569555)
procedure TCustomForm.Close;
var
  CloseAction: TCloseAction;
begin
  if fsModal in FFormState then
    ModalResult := mrCancel
  else
    if CloseQuery then
    begin
      if FormStyle = fsMDIChild then
        if biMinimize in BorderIcons then
          CloseAction := caMinimize else
          CloseAction := caNone
      else
        CloseAction := caHide;
      DoClose(CloseAction);
      if CloseAction <> caNone then
        if Application.MainForm = Self then Application.Terminate
        else if CloseAction = caHide then Hide
        else if CloseAction = caMinimize then WindowState := wsMinimized
        else Release;
    end;
end;

2004-11-19 10:27:08  &PassWorld(3569555)
而Destory在Release里面说明了。实质上是一回事。

2004-11-19 10:27:11  &PassWorld(3569555)
如果你不重载的话。

2004-11-19 10:27:23 红小鱼(250213818)
Destory,是否是释放空间或者剔除临时文件

2004-11-19 10:27:30  &PassWorld(3569555)
这时已经接收不到消息了,因为WndProc不处理。

2004-11-19 10:27:36 /:>D10.天地弦(185511468)
在Destory里才是真的要关闭了

2004-11-19 10:27:58 B3.Locet(2212967)
嗯```

2004-11-19 10:28:18  &PassWorld(3569555)
procedure TCustomForm.Release;
begin
  PostMessage(Handle, CM_RELEASE, 0, 0);
end;

2004-11-19 10:28:18   雨中太阳(48572512)
如何实现在客户端写的sql语句,用socketconnection传递到服务器端,让adodataset执行,然后返回数据到clientdataset呢?

2004-11-19 10:28:28   雨中太阳(48572512)
如何实现在客户端写的sql语句,用socketconnection传递到服务器端,让adodataset执行,然后返回数据到clientdataset呢? 

2004-11-19 10:28:32  &PassWorld(3569555)
呵呵。雨中太阳的这个思想很好。

2004-11-19 10:28:37  &PassWorld(3569555)
你可以看看ASTA的一些资料。

2004-11-19 10:28:44 红小鱼(250213818)
他主要是用来通知系统来作处理

2004-11-19 10:28:44   雨中太阳(48572512)
如何实现在客户端写的sql语句,用socketconnection传递到服务器端,让adodataset执行,然后返回数据到clientdataset呢? 能不能?

2004-11-19 10:30:55 B3.Locet(2212967)
实践是检验真理的XXXX`

2004-11-19 10:31:05 /:>D10.天地弦(185511468)
当然可以

2004-11-19 10:31:26 /:>D10.天地弦(185511468)
但是为什么要在客户端写SQL语句

2004-11-19 10:31:55   雨中太阳(48572512)
因为要查询的,条件是客户端控制的呀~

2004-11-19 10:32:02 红小鱼(250213818)
可以使用命令发送sql字符串,在服务器端再使用命令解释处理

2004-11-19 10:32:09  &PassWorld(3569555)
呵呵。

2004-11-19 10:32:36   雨中太阳(48572512)
比如要查询人的名字和性别,还有组合查询?

2004-11-19 10:32:55 C01.枫长舞(273966879)
好象、似乎、大概、可能、应该是:能!

2004-11-19 10:33:01   雨中太阳(48572512)
那如何发送字符串?

2004-11-19 10:33:08 B3.Locet(2212967)
你喜欢怎么查就怎么查```
commandtext

2004-11-19 10:33:30 /:>D10.天地弦(185511468)
查询把条件传到服务端就行了

2004-11-19 10:33:34 B3.Locet(2212967)
不要想得太复杂```
可有时候也不要想得太简单``[:$]

2004-11-19 10:33:35  &PassWorld(3569555)
雨中太阳说的其实就是“中间件”要做的工作。

2004-11-19 10:34:03  &PassWorld(3569555)
可以传条件,可以有Server Method就当然可以直接传sql语句,然后再用一定的格式把结果传回来。要能支持多种数据库。相信并不容易。

2004-11-19 10:34:34 /:>D10.天地弦(185511468)
你肯定没有看A1的Demo了

2004-11-19 10:34:44 /:>D10.天地弦(185511468)
还有笔记

2004-11-19 10:34:52 B9.&紫风铃&(512551)
知识好深厚啊

2004-11-19 10:34:59  &PassWorld(3569555)
其实已经跳出A1的框框了

2004-11-19 10:35:20   雨中太阳(48572512)
A1的Demo在那里?以前好象下了,可是不能运行?
 
2004-11-19 10:35:22 /:>D10.天地弦(185511468)
关于这个讨论,A1他们早讨论过

2004-11-19 10:36:01  &PassWorld(3569555)
。。

2004-11-19 10:36:47 /:>D10.天地弦(185511468)
http://www.cnblogs.com/dksoft/articles/40825.html

2004-11-19 10:37:45 /:>D10.天地弦(185511468)
这里是笔记,不过雨中太阳,你要认真看!才会得到精华,不至这一篇,还有很多,慢慢看

2004-11-19 10:38:04   雨中太阳(48572512)
好的,谢谢了

2004-11-19 10:39:31 /:>D10.天地弦(185511468)
希望你能取得到真经

2004-11-19 10:39:37  &PassWorld(3569555)
为什么我下载的三层代码我在这边调试运行不了。

2004-11-19 10:39:55  &PassWorld(3569555)
控件装不了。

2004-11-19 10:40:35 /:>D10.天地弦(185511468)
passworld你也要取经?

2004-11-19 10:40:44 B9.&紫风铃&(512551)
可以啊。

2004-11-19 10:41:00 B9.&紫风铃&(512551)
看安装说明

2004-11-19 10:41:16  &PassWorld(3569555)
向大伙学习[:D]

2004-11-19 10:41:25  &PassWorld(3569555)
D10别老是笑我啊,每句话都有笑脸。

2004-11-19 10:43:37 /:>D10.天地弦(185511468)
我走了,去看看那篇文章!

下课

 

目录
相关文章
|
存储 安全 算法
深入剖析JVM内存管理与对象创建原理
JVM内存管理,JVM运行时区域,直接内存,对象创建原理。
40 2
|
1月前
|
存储 算法 安全
【JVM】深入理解JVM对象内存分配方式
【JVM】深入理解JVM对象内存分配方式
26 0
|
6月前
|
存储 安全 程序员
浅谈内存管理及僵尸对象
浅谈内存管理及僵尸对象
33 0
|
1月前
|
Python
Python中如何判断两个对象的内存地址是否一致?
Python中如何判断两个对象的内存地址是否一致?
17 0
|
1月前
|
存储 安全 Java
【JVM】Java堆 :深入理解内存中的对象世界
【JVM】Java堆 :深入理解内存中的对象世界
50 0
|
2月前
|
存储 编译器 程序员
近4w字吐血整理!只要你认真看完【C++编程核心知识】分分钟吊打面试官(包含:内存、函数、引用、类与对象、文件操作)
近4w字吐血整理!只要你认真看完【C++编程核心知识】分分钟吊打面试官(包含:内存、函数、引用、类与对象、文件操作)
106 0
|
2月前
|
存储 缓存 算法
深入理解JVM - 对象分配内存
深入理解JVM - 对象分配内存
29 1
|
3月前
|
存储 缓存 算法
对象和数组并不是都是在堆上分配内存的
对象和数组并不是都是在堆上分配内存的
25 0
|
8月前
|
缓存 关系型数据库 MySQL
高性能内存对象缓存Memcached
高性能内存对象缓存Memcached案例
|
4月前
|
存储 Java
JVM(四):对象的内存布局
JVM(四):对象的内存布局

热门文章

最新文章