错误提示为project project1.exe raise exception class EAccessViolation with 'Access ciolation at address 004051E0 in module 'project1.ext'.read of address 00000018'.Process stoped.use stop or run to continue
解决方案 »
- 不费神的50分。
- 如何在MDI主窗体中拦截到子窗体的Create,Destroy,Activate消息?
- 用程序如何實現直接打開某個WINDOWS文件夾
- 如何将Access数据表中转化为OLE对象的图片读取并显示出来?
- 在ROSE类图中如何设置属性,使生成的代码中能生成相应的属性
- SQL小问题,在线等。
- 各位真诚的朋友,给我一个你的建议吧。(关于做计算机教师的)
- 如何让query的指针指向某一条记录
- 紧急求救!用BDE连接ACCESS2000数据库出错!
- 请问在SQL中日期型字段应如何查询
- 急!急!急!DELPHI图片存储问题!!
- 请问怎样得到一个字符的ASCII码(即该功能的函数)?多谢了.
procedure _IntfCopy(var Dest: IInterface; const Source: IInterface);
{$IFDEF PUREPASCAL}
var
P: Pointer;
begin
P := Pointer(Dest);
if Source <> nil then
Source._AddRef;
Pointer(Dest) := Pointer(Source);
if P <> nil then
IInterface(P)._Release;
end;
当点Button2时
pTest:= pTb;// as ITest;
pTest.test;
调用
_IntfCopy
pTest保存了先前pTa的值
if P <> nil then
IInterface(P)._Release;
所以相当于pTa._Release,这是引用计数为零被释放
下次点时会出错
可以这样
procedure CallTest(const ATest: ITest);
begin
ATest.test;
end;
声明为Const不会增加引用计数,
然后调用CallTest(pTa), CallTest(pTb), CallTest(pTc);或者
procedure AddRef;
begin
if pTest <> nil then
pTest._AddRef;
end;
在
每一个赋值之前加上
AddRef;
p:= pTb
增加引用计数
不过不知道这样好不好
delphi对接口类型作了引用计数的处理