关于NTDLL.DLL出错的奇怪问题

needs 2009-08-16 10:35:50
DELPHI2007使用了FRAME,在IDE环境下运行正常,单独运行时就出现ntdll.dll的地址错误,不知有哪位大侠知道错误原因?
还有个情况,单独运行时出错后关闭,第二次运行就正常了
...全文
11489 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWYWT 2010-06-25
  • 打赏
  • 举报
回复
测试似乎和IE版本有关 IE6没有问题 IE8有问题
WWYWT 2010-06-25
  • 打赏
  • 举报
回复
我也遇到这个问题 代码和楼主基本一样的 如果解决了麻烦也通知我一下 我QQ1478706 万分感谢
  • 打赏
  • 举报
回复
我也是遇到这样的问题啊
wxsan 2009-08-21
  • 打赏
  • 举报
回复
友情帮顶!
otmac 2009-08-21
  • 打赏
  • 举报
回复
我也遇到这问题,不知道啥原因,关注。
needs 2009-08-20
  • 打赏
  • 举报
回复
现在的问题是直接读图片文件没问题,图片文件编译成资源后再读就要出错,不知是不是代码哪里有问题
needs 2009-08-20
  • 打赏
  • 举报
回复
我已经参考过这篇文章,试过显式调用_AddRef,把GPBitmap改回GPImage等,除此以外我看与他的例子没有本质区别了
gyk120 2009-08-20
  • 打赏
  • 举报
回复
needs 2009-08-20
  • 打赏
  • 举报
回复
FRAME是编译在主EXE的,读取RC文件也一样
needs 2009-08-20
  • 打赏
  • 举报
回复
现在可以确定是和读取图片的这段代码有关
procedure LoadImageFromRes(var AImage: TGPBitmap; const AResName, AResType: string);
var
lStream: TStream;
lStramAdapter: TStreamAdapter;
begin
AImage:= nil;
lStream := TResourceStream.Create(HInstance, AResName, PAnsiChar(AResType));
try
lStramAdapter:= TStreamAdapter.Create(lStream);
try
AImage:= TGPBitmap.Create(lStramAdapter); 《----使用这句时出错
//AImage:= TGPBitmap.Create('Down.png'); 〈---使用这句就不出错
finally
lStramAdapter:= nil;
end;
finally
lStream.Free;
end;
end;

如果使用lStramAdapter就会出现NTDLL。DLL的错误,直接读取文件就不出错
这是为什么?
wooden954 2009-08-20
  • 打赏
  • 举报
回复
非常同意4楼观点
gyk120 2009-08-20
  • 打赏
  • 举报
回复
FRAME编译到了DLL里面还是EXE里面?
读取资源DLL出错,你把资源DLL的资源提取出来做成rc文件调用会不会出错?
needs 2009-08-19
  • 打赏
  • 举报
回复
可以确定是在读取资源DLL中的图片并绘制到窗口界面时出错
出错以后系统需要自动重绘时不再出错
wintergoes 2009-08-18
  • 打赏
  • 举报
回复
全都加上日志输出
看看是哪抛出的异常
needs 2009-08-17
  • 打赏
  • 举报
回复
我是在WIN2003系统下,不确定是哪一句代码出问题,关键是调试时不会出错
而且运行一次出错后再运行就不再出错
可能与图片读取和绘制有关
也可能和COM有关
阿呆_ 2009-08-17
  • 打赏
  • 举报
回复
你说的问题我遇到过很多次了。如果你程序是在Vista或者win7系统下,退出时报NTDLL.DLL读取非法内存。那么就可能是我遇到的原因(有意思的是开始我们的程序在Win7 64和Vista 32下会报错,改了别的东西重新编译后变成在Win7 32和Vista 64下出错了)。 我发觉原因可能是因为Vista和Win7中某些COM组件的实现和DELPHI的COM实现不兼容。而且问题一般出现在你delphi程序调用了Vista以上版本的新形式的Open/SaveDialog,不管你在Dialog中选确定还是取消,就会有很大机会在程序退出时报错,具体错误是在程序退出时卸载oleauto.dll时释放COM组件时访问了已经释放的内存而造成的,说明某个COM组件的引用计数已经乱了。
改正方法有两个,一是不使用Vista提供的Common Item Dialog组件而仍然使用XP的Common Dialog方式来建立Open/Save 对话框,即调用Open/SaveDialogBox.Execute前先设置Dialogs.UseLatestCommonDialogs:=False; 二是用VS写个调用Common Item Dialog实现Open/Save对话框的dll然后给delphi调用。
cnhxjtoa 2009-08-17
  • 打赏
  • 举报
回复
这个问题只有LZ自己才能解决,没有代码呢。。。。
gyk120 2009-08-16
  • 打赏
  • 举报
回复
NTDLL错误一般是和系统交互出现了问题,没有说是哪个函数吗?那样只能调试下断点看看
mathsfan 2009-08-16
  • 打赏
  • 举报
回复
我也经常碰到这样的情况,好象跟你写的代码有关系,有时我改过代码以后就不会出现ntdll.dll错误了。
祝你好运。

5,386

社区成员

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

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