我一直在使用旧的Win32应用程序,该应用程序使用OCI(Oracle调用接口)连接到Oracle数据库。应用程序调用{{1}}来捕获(除其他外)访问冲突(异常代码0xC0000005)。
但是,只要应用程序使用OCI函数SetUnhandledExceptionFilter()
登录到Oracle,OCI库就会覆盖已安装的异常过滤器,这意味着应用程序最初安装的过滤器不再捕获异常。这已经使用调试器以及检查已安装的异常过滤器的函数指针值进行了验证。
是否有人知道为什么OCI函数orlon()
调用orlon()
以及如何禁用此行为?
答案 0 :(得分:1)
OCI / Oracle似乎默认安装信号处理程序(* nix)和异常过滤器(Windows)来处理分段错误(* nix),访问冲突(Windows)等事件以便记录诊断。 documentation描述了报告事件的位置以及如何使用Oracle实用程序adrci
检查事件。
设置
DIAG_SIGHANDLER_ENABLED=FALSE
配置文件sqlnet.ora
中的禁用OCI信号处理程序/异常过滤器,并重新启用标准操作系统故障处理。
答案 1 :(得分:1)
您还可以通过覆盖" SetUnhandledExceptionFilter#34;来阻止第二次调用。也可以看看: PreventSetUnhandledExceptionFilter
这样可以防止第二次调用安装在系统中......