请教一个关于ntdll.dll超难的问题

lzsywk 2006-08-24 10:24:55
我这几天重装了一下电脑的操作系统win2000,也把DELPHI7重装,包括一些控件。然后重新编译以前写的程序,问题就出现了:
我在一个界面用AdvStringGrid,代码如下
procedure Tw_f_grscqk_cx.AdvStringGrid1GetEditorType(Sender: TObject; ACol,
ARow: Integer; var AEditor: TEditorType);
begin
case ACol of
0:AEditor := edComboList;
1:AEditor := edComboList;
end;
if (acol=0) then
begin
AdvStringGrid1.Combobox.Clear;
AdvStringGrid1.AddComboString('并且');
AdvStringGrid1.AddComboString('或者');
end;

if acol=1 then
begin
AdvStringGrid1.Combobox.Clear;
AdvStringGrid1.AddComboString('生产批号');
AdvStringGrid1.AddComboString('产品代码');
AdvStringGrid1.AddComboString('产品型号');
AdvStringGrid1.AddComboString('工序拼音');
AdvStringGrid1.AddComboString('员工卡号');
AdvStringGrid1.AddComboString('员工姓名');
AdvStringGrid1.AddComboString('机台代码');
AdvStringGrid1.AddComboString('薄膜批号');
AdvStringGrid1.AddComboString('日期');
end;
end;
但在程序执行的时候,当你点击AdvStringGrid的某个单元格就出现:EAccessViolation with message'Access violation at address 77f99f58 in module 'ntdll.dll '.Write of address 00404bad ' .在没有重新装系统之前,这个界面是没有任何问题的。
我如果把程序改成
procedure Tw_f_grscqk_cx.AdvStringGrid1GetEditorType(Sender: TObject; ACol,
ARow: Integer; var AEditor: TEditorType);
begin
case ACol of
0:AEditor := edComboList;
1:AEditor := edComboList;
end;
if (acol=0) then
begin
AdvStringGrid1.Combobox.Clear;
AdvStringGrid1.AddComboString('并且');
AdvStringGrid1.AddComboString('或者');
end;
end;
就没有什么问题,请问这个问题要怎么处理?我有试着从其他地方拷了一个ntdll.dll覆盖到C:\WINNT\system32和C:\WINNT\ServicePackFiles\i386中,但还是不能用。谢谢了!
...全文
337 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xixuemao 2006-08-25
  • 打赏
  • 举报
回复
>>我认为是程序的问题。因为程序中隐含的问题,有的机器上不出现,有的机器上出现,事实上是内存访问出错。铁定是Bug。

比较同意,我觉得也是程序的问题,主要是内存访问的问题。
对于一个字符串不正确的访问同样会出现这个问题的,楼主好好看看代码吧。
teapot 2006-08-25
  • 打赏
  • 举报
回复
我认为是程序的问题。因为程序中隐含的问题,有的机器上不出现,有的机器上出现,事实上是内存访问出错。铁定是Bug。
lzsywk 2006-08-24
  • 打赏
  • 举报
回复
我把程序拿到另外的电脑上去编译不会出什么问题。
TO kl2000() :请问要怎样删除控件啊?呵呵
to yyfhz(火山) :是随便点就报错了,没有经过一定的步骤才会报错。这个程序没有外接数据库。
yyfhz 2006-08-24
  • 打赏
  • 举报
回复
在罗嗦一句,这些数据库和配置文件在几台电脑上的内容是否也相同。
yyfhz 2006-08-24
  • 打赏
  • 举报
回复
LZ的错误可以重现吗?
是随便点就报错了,还是需要经过一定的步骤才会报错?
程序有连外部的数据库或配置文件吗?数据库的资料和配置文件的资料在其他2台电脑上也有吗?
把代码一行行加回去,看加到哪一行时报错了。
kl2000 2006-08-24
  • 打赏
  • 举报
回复
不是程序代码问题,我也遇到这个问题。 不过我后来控件删除之后,在放上去在编译就没有问题了。 感觉问题是操作系统上的问题吧。
postren 2006-08-24
  • 打赏
  • 举报
回复
换台机器试试看
lzsywk 2006-08-24
  • 打赏
  • 举报
回复
应该不会是程序的问题,因为这个程序在我没有重装系统前是没有任何的问题的,刚才我把我这这个程序拿到别人的三台电脑上去运行,只有一台有出现问题,其他两台都没有问题,这样看来会不会主要是windows补丁的问题呢?
xixuemao 2006-08-24
  • 打赏
  • 举报
回复
>>看起来不是程序的问题

是挺奇怪的,如果不是程序问题为啥第二段代码就没问题呢,有点晕
windindance 2006-08-24
  • 打赏
  • 举报
回复
看起来不是程序的问题
安装windows补丁和delphi补丁看看。
xixuemao 2006-08-24
  • 打赏
  • 举报
回复
第一段代码设置断点看看哪句出的问题吧
touchboy 2006-08-24
  • 打赏
  • 举报
回复
是系统的问题,我也碰过,象楼上的打补丁,换一台机器或操作系统试一下

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧