Delphi 这500是什么错误误?

16:43 提问
delphi XE6 原生JSON程序 运行报错,有可能是什么原因?
delphi XE6 原生JSON程序 在未安装的delphiXE6的电脑上运行报错,有可能是什么原因?
其他相关推荐
其他相似问题delphi 错误代码_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
delphi 错误代码
&&delphi运行错误代码解说
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩12页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Delphi退出报错参考资料(2)
我的图书馆
Delphi退出报错参考资料(2)
1.修改注册表:开
始菜单-运行-输入regedit-点确定-进入注册表,
在:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer
/ShellExecuteHooks 下,应该只有一个正常的键值"{AEB-11d0-97EE-00C04FD91972},
将其他的删除。 2.Delphi中利用SEH屏蔽退出时的Runtime Error
Delphi写的程序,如果在单元的finalization里出现了一些异常操作会导致退出时抛出Runtime Error ,规范的处理办法当然是解决这些异常,但是有些特殊的情况下,比如用了很多的第三方控件,实在没办法解决问题时,只有把他屏蔽掉,这样给客户的时候就不至于看到满天的Runtime Error 了。
前些日子同事正好碰到了这个问题,他写的一个ACTIVEX控件,在客户的IE里关闭的时候就会抛出很多错误导致IE死掉,但是在本机又模拟不出来,问题不能解决,又得应付客户。找我讨论解决方案,我提议可以用SEH解决,于是写了一段代码,效果不错,不敢独享,贴出来希望能够帮大家应付遇到的问题。
我的做法其实很简单,就是在 END.之前手工调用Halt释放,并且将Halt抛出的错误屏蔽掉,这样做和正常的DELPHI释放过程没有任何区别,因为End.编译后其实就是一句话 Call Halt0,只是VCL自己没有屏蔽Halt0里抛出的错误,而是跳出个Runtime Error 来;
首先就是位置的问题,如果是EXE的话,直接在END.之前就行了,如果是Dll的话就麻烦点,需要挂上DllProc,当wReason = DLL_PROCESS_DETACH时处理。
然后就是如何屏蔽错误的问题了,第一个最容易想到的做法就是直接
但是这样是不行
的,因为try…except
end捕获的错误都会放到System单元的_HandleOnException中处理,函数检查错误类型是否是DelphiException,如果
不是就不处理,这个时候就会被DELPHI的顶层异常机制捕获,并抛出Runtime
error,halt里抛出来的错误恰恰就是非DelphiException,代码如下:
procedure&&&&&& _HandleOnE
&&&&&& CMP&&&& [EAX].TExceptionRecord.ExceptionCode,cDelphiException
&&&&& && JE&&&&& @@DelphiException
&&&&&&& CLD
&&&&&&& CALL&&& _FpuInit
&&&&&&& MOV&&&& EDX,ExceptClsProc
&&&&&&& TEST&&& EDX,EDX
&&&&&&& JE&&&&& @@exit
&&&&&&& CALL&&& EDX
&&&&&&& TEST&&& EAX,EAX
&&&&&&& JNE&&&& @@common
&&&&&&& JMP&&&& @@exit
所以,需要借助SHE机制来处理这个问题(哈哈,不然就得改标题了),代码如下(关于如何挂SHE我就不介绍了,我在另外一篇文章《》详细介绍了):
&&&&& //挂上SEH
xor edx, edx
&&&&& push ebp
&&&&& push OFFSET @@safecode
&&&&& push dword ptr fs:[edx]
&&&&& mov fs:[edx],esp
&&&&& //调用Halt0
&&&&& call Halt0
&&&&& jmp @@
&&&&& @@safecode:
&&&&&&& //如果出现异常继续调用Halt0退出
call Halt0;
&&&&& @@exit:
这个做法的好处就是,不会对DELPHI正常释放过程产生影响,所有的释放操作都是和VCL一致的,只是不会把错误显示出来。
以下是完整代码:
一、EXE的情况,把代码放在工程文件
procedure Halt0;
Application.I
Application.CreateForm(TForm1, Form1);
Application.R
&&& xor edx, edx
&&& push ebp
&&& push OFFSET @@safecode
&&& push dword ptr fs:[edx]
&&& mov fs:[edx],esp
&&& call Halt0
&&& jmp @@
&&& @@safecode:
&&&&& call Halt0;
&&& @@exit:
二、DLL的情况,把代码放在工程文件里
procedure Halt0;
OldProc: P
procedure DLLEntryPoint(dwReason: DWord);
if (dwReason = DLL_PROCESS_DETACH) Then
&&&&& xor edx, edx
&&&&& push ebp
&&&&& push OFFSET @@safecode
&&&&& push dword ptr fs:[edx]
&&&&& mov fs:[edx],esp
&&&&& call Halt0
&&&&& jmp @@
&&&&& @@safecode:
&&&&&&& call Halt0;
&&&&& @@exit:
DllProc := @DLLEntryP
DllProcEX := @DLLEntryP
测试这段代码可以,自己在某个单元的finalization段里抛出一个异常,看看加上代码和不加代码的效果有何不同。
馆藏&23162
TA的最新馆藏
喜欢该文的人也喜欢Delphi常见错误—Can&not&make&a&visible&window&modal
建立子窗体时出现错误“cannot make a visible window modal”
(1)首先在project的options中,将子窗口改为不自动创建,即“Available forms”。
(2)如果窗体是MDIChild的话,是不可以ShowModal的,可以Show。因为ShowModal与Show是不同的。
ShowModal时,要求Visiable=False,假使你设置为Visiable=True就会产生错误,而子窗体设置为MDIChild时Visiable自动设置为T
Show时,要求Visiable=True或False都不会错。
ShowModal函数定义:
&function TCustomForm.ShowModal:
WindowList: P&
&SaveFocusCount: I&
&& & SaveCursor:
& && SaveCount:
ActiveWindow: HW&
if Visible //Form.visible=True.
or not Enabled or (fsModal in FFormState) or
(FormStyle = fsMDIChild) then
EInvalidOperation.Create(SCannotShowModal); //产生一个raise,出错误。
其中SCannotShowModal = 'Cannot make a visible window modal';
&&&&&&&&&&&
Show函数定义:&
procedure TCustomForm.S&
&&& Visible :=
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 http302是什么错误 的文章

 

随机推荐