VB6随机双溢出错误

时间:2013-09-23 15:30:19

标签: vb6

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

我必须自定义用VB6编写的遗留应用程序,最近溢出错误已经开始在整个地方发生。有时在几年没有碰过的功能中!

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

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

Dim test As Double
test = 0#

怎么可能抛出溢出错误?

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

2 个答案:

答案 0 :(得分:4)

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

在大多数情况下,这可能是由某些执行浮点运算的DLL引起的。如果您对这些外部DLL有任何控制权,那么我的建议是将此行放在应用程序调用的函数的末尾:

_clearfp();

此功能记录在此处:http://msdn.microsoft.com/en-us/library/49bs2z07.aspx

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

Public Sub ClearFP()
    On Error Resume Next
    Dim d as Double
    d = 0#
End Sub

您可以在任何您认为是罪魁祸首的DLL调用之后调用它。

隔离最初执行哪个功能的技巧只是在错误出现之前查看调用。或者,更复杂的解决方案是编译应用程序并通过可以破坏浮点异常的调试器运行它。

答案 1 :(得分:-1)

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

用于文件名 应用于DB时,与ususlly一起使用 将数字视为双打 如果条件为真,则编译常量或代码段

我确信还有更多。

这可能取决于编译器。

我的建议是尝试:

Dim test As Double
test = CDbl(0)

看看是否能解决问题。

相关问题