关于NTDLL.DLL出错的奇怪问题 DELPHI2007使用了FRAME,在IDE环境下运行正常,单独运行时就出现ntdll.dll的地址错误,不知有哪位大侠知道错误原因?还有个情况,单独运行时出错后关闭,第二次运行就正常了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我也经常碰到这样的情况,好象跟你写的代码有关系,有时我改过代码以后就不会出现ntdll.dll错误了。祝你好运。 NTDLL错误一般是和系统交互出现了问题,没有说是哪个函数吗?那样只能调试下断点看看 你说的问题我遇到过很多次了。如果你程序是在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调用。 我是在WIN2003系统下,不确定是哪一句代码出问题,关键是调试时不会出错而且运行一次出错后再运行就不再出错可能与图片读取和绘制有关也可能和COM有关 可以确定是在读取资源DLL中的图片并绘制到窗口界面时出错出错以后系统需要自动重绘时不再出错 FRAME编译到了DLL里面还是EXE里面?读取资源DLL出错,你把资源DLL的资源提取出来做成rc文件调用会不会出错? 现在可以确定是和读取图片的这段代码有关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的错误,直接读取文件就不出错这是为什么? FRAME是编译在主EXE的,读取RC文件也一样 或许你应该参考下这个??http://blog.csdn.net/maozefa/archive/2007/07/12/1685930.aspx 我已经参考过这篇文章,试过显式调用_AddRef,把GPBitmap改回GPImage等,除此以外我看与他的例子没有本质区别了 测试似乎和IE版本有关 IE6没有问题 IE8有问题 谁给解释一下这段代码? 关于TWebBrowser,以及TIDHttp控件的使用 cxGrid主从表导出excel的问题 請問,如何無條件的轉為字符? 打印的问题,关于FASTREPORT 如果DBgrid中单元格为空,则用红色来表示,怎样写? 现在国内的软件有哪些行业啊? 我想让dbgrid中满足条件的记录(行)显示红色,该怎么办??? =====给我一份工作吧,我快要没钱吃饭了!==== 我的问题很简单,因为我很懒。 EDI 电子数据交换 TCP丢包和异常断开。
祝你好运。
改正方法有两个,一是不使用Vista提供的Common Item Dialog组件而仍然使用XP的Common Dialog方式来建立Open/Save 对话框,即调用Open/SaveDialogBox.Execute前先设置Dialogs.UseLatestCommonDialogs:=False; 二是用VS写个调用Common Item Dialog实现Open/Save对话框的dll然后给delphi调用。
而且运行一次出错后再运行就不再出错
可能与图片读取和绘制有关
也可能和COM有关
出错以后系统需要自动重绘时不再出错
读取资源DLL出错,你把资源DLL的资源提取出来做成rc文件调用会不会出错?
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的错误,直接读取文件就不出错
这是为什么?
http://blog.csdn.net/maozefa/archive/2007/07/12/1685930.aspx