DELPHI2007使用了FRAME,在IDE环境下运行正常,单独运行时就出现ntdll.dll的地址错误,不知有哪位大侠知道错误原因?
还有个情况,单独运行时出错后关闭,第二次运行就正常了

解决方案 »

  1.   

    我也经常碰到这样的情况,好象跟你写的代码有关系,有时我改过代码以后就不会出现ntdll.dll错误了。
    祝你好运。
      

  2.   

    NTDLL错误一般是和系统交互出现了问题,没有说是哪个函数吗?那样只能调试下断点看看
      

  3.   

    你说的问题我遇到过很多次了。如果你程序是在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调用。
      

  4.   

    我是在WIN2003系统下,不确定是哪一句代码出问题,关键是调试时不会出错
    而且运行一次出错后再运行就不再出错
    可能与图片读取和绘制有关
    也可能和COM有关
      

  5.   

    可以确定是在读取资源DLL中的图片并绘制到窗口界面时出错
    出错以后系统需要自动重绘时不再出错
      

  6.   

    FRAME编译到了DLL里面还是EXE里面?
    读取资源DLL出错,你把资源DLL的资源提取出来做成rc文件调用会不会出错?
      

  7.   

    现在可以确定是和读取图片的这段代码有关
    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的错误,直接读取文件就不出错
    这是为什么?
      

  8.   

    FRAME是编译在主EXE的,读取RC文件也一样
      

  9.   

    或许你应该参考下这个??
    http://blog.csdn.net/maozefa/archive/2007/07/12/1685930.aspx
      

  10.   

    我已经参考过这篇文章,试过显式调用_AddRef,把GPBitmap改回GPImage等,除此以外我看与他的例子没有本质区别了
      

  11.   

    测试似乎和IE版本有关 IE6没有问题 IE8有问题