VB6随机双溢出错误

VB6随机双溢出错误,vb6,Vb6,有人知道vb6中随机溢出错误的原因吗 我必须自定义一个用VB6编写的遗留应用程序,最近到处都出现溢出错误。有时在一些多年没有接触过的功能中 当尝试将某些内容分配给Double类型的变量时,总是会发生此错误 这些错误的原因可能不是抛出错误的代码,而是其他原因。但我不知道该找什么。函数因溢出错误而失败的最令人困惑的示例是以下代码: Dim test As Double test = 0# 这怎么可能引发溢出错误 我尝试过启用一些编译器优化,比如不检查浮点计算错误等等。这已经“解决”了一些问题,但其

有人知道vb6中随机溢出错误的原因吗

我必须自定义一个用VB6编写的遗留应用程序,最近到处都出现溢出错误。有时在一些多年没有接触过的功能中

当尝试将某些内容分配给Double类型的变量时,总是会发生此错误

这些错误的原因可能不是抛出错误的代码,而是其他原因。但我不知道该找什么。函数因溢出错误而失败的最令人困惑的示例是以下代码:

Dim test As Double
test = 0#
这怎么可能引发溢出错误


我尝试过启用一些编译器优化,比如不检查浮点计算错误等等。这已经“解决”了一些问题,但其他问题仍然存在。

VB6将以这样的方式运行,即如果某个外部信号发出浮点错误标志,则在您自己的代码中执行下一个浮点操作之前,不会报告该错误标志

在大多数情况下,这可能是由执行浮点操作的某个DLL引起的。如果您可以控制这些外部DLL,那么我的建议是将这一行放在应用程序调用的函数的末尾:

_clearfp();
此功能记录在此处:

如果您没有太多的控制权,您可以通过从调用该函数的DLL调用自己的函数来解决这个问题。或者,仅使用VB6的简单方法是:

Public Sub ClearFP()
    On Error Resume Next
    Dim d as Double
    d = 0#
End Sub
您可以在任何您认为是罪魁祸首的DLL调用之后调用它

隔离最初使用哪个函数的一个技巧是在错误出现之前查看调用。或者,一个更复杂的解决方案是编译应用程序并通过调试器运行它,调试器可以在出现浮点异常时中断。

在VB6中,哈希(#)符号可能意味着许多事情:

用于文件名 适用于DBs时,通常与日期一起使用 把数字当作双倍 如果条件为真,则编译常量或代码段

我相信还有更多

它可能取决于编译器

我的建议是:

Dim test As Double
test = CDbl(0)

看看这是否解决了问题。

这听起来像是我问题的解决方案,我在软件中唯一改变的是用新版本替换第三方组件。是的。这很可能就是问题所在:)。如果我的答案最终成功,请接受我的答案!还有一个问题。您发布的VB破解不起作用,下一个浮点操作仍然会引发错误,您有什么其他的想法来弥补我的这种外部错误吗?我的建议是从VB6调用一个C++的DLL,它做的是可能比我未经测试的hack工作得更好。@DaveInCaz我提出的解决方案允许我调用导致产生浮点错误的数学库(无论浮点精度MSVC项目设置如何)。不幸的是,没有内置Win32 API的方式,所以你必须自己制作一个调用这个C++函数的DLL。本教程很好地涵盖了:(基本上,创建一个带有.DEF文件命名函数的C++项目,并确保用“代码>