procedure changevariant(s:string)
var
v:variant
begin
v:=s;
Tvardate(v).vtype:=varinteger;
tvardate(v).vinteger:=32;
v:=34;
end;
为什么说这样影响到了DELPHI给字符串S的引用计数减1,关键是DELPHI怎样对字符串
进行引用计数的在什么地方记录,怎样管理的,还请各位朋友帮帮忙!!!!!
var
v:variant
begin
v:=s;
Tvardate(v).vtype:=varinteger;
tvardate(v).vinteger:=32;
v:=34;
end;
为什么说这样影响到了DELPHI给字符串S的引用计数减1,关键是DELPHI怎样对字符串
进行引用计数的在什么地方记录,怎样管理的,还请各位朋友帮帮忙!!!!!
解决方案 »
- 如何用WebBrowser打开Internet临时文件夹中的文件呢????
- DBGridEh中Float型字段输入-----报错,如何捕捉及处理
- websnap问题,老规矩,第一个回答正确给全分!~~~~~~~~~
- 散分50 串口通讯问题
- 为何下面的程序执行的时候,edit1\edit2的现实没有任何变化
- 求delphi初学实例!
- 请问!有难!SOS!
- ■■[HOT]: 关于提高CSDN访问速度的若干决议 ■■
- 求教dll 动态事件传递问题
- 如何禁止共享ADSL上网的用户在互联星空定购电视剧场等服务?
- com+急问,各位大侠:请给与帮忙,高分!180
- 在DBGrid中鼠标中键滚动是哪个事件呀?
Tvardate(v).vtype:=varinteger; //这里强制改变v的实际类型导致以后不能减少引用计数
tvardate(v).vinteger:=32;
v:=34; //正常情况下这里会导致减少引用计数,但由于上面强制把类型改为整型,所以编译器以为原来的实际类型并不是字符串,所以不会减少引用计数引用计数是放在字符串指向的内存偏移-8的地方,而且是由编译器自动管理的。
p:PInteger;p:=s;
dec(p,2);
inc(p^,4);这样就把s的引用计数增加4,要注意几点
如果引用计数是-1那么就不要改变,这用字符串是常量字符串
WideString没有引用计数
最后说一下没有什么必要不要手工去改变引用计数,这样做很危险。