gpt4 book ai didi

VB6 随机双溢出错误

转载 作者:行者123 更新时间:2023-12-04 21:17:23 25 4
gpt4 key购买 nike

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

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

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

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

Dim test As Double
test = 0#

这怎么可能引发溢出错误?

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

最佳答案

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

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

_clearfp();

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

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

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

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

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

关于VB6 随机双溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18963197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com