VB6中的乘法导致溢出异常-如何解决?

VB6中的乘法导致溢出异常-如何解决?,vb6,long-integer,Vb6,Long Integer,在过时的VB6中,我试图计算可用和使用的磁盘空间: Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Lo

在过时的VB6中,我试图计算可用和使用的磁盘空间:

Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long

Dim info As DiskInformation
Dim lAnswer As Long
Dim lpRootPathName As String
Dim lpSectorsPerCluster As Long
Dim lpBytesPerSector As Long
Dim lpNumberOfFreeClusters As Long
Dim lpTotalNumberOfClusters As Long
Dim lBytesPerCluster As Long
Dim lNumFreeBytes As Double
Dim dPercentFreeClusters As Double
Dim sString As String

lpRootPathName = "c:\"
lAnswer = GetDiskFreeSpace(lpRootPathName, lpSectorsPerCluster, lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters)
lBytesPerCluster = lpSectorsPerCluster * lpBytesPerSector

' Throws overflow exception - I guess there were no Terabyte drives when VB6 came around
lNumFreeBytes = lBytesPerCluster * lpNumberOfFreeClusters
lBytesPerCluster=4096 | lpnumberofreeclusters=474304894

我尝试过用CLng包装乘法,但仍然得到溢出异常


如何解析
?lBytesPerCluster*lpNumberOfFreeClusters
??

转换为
变量
数据类型:

Dim v1, v2, v3 As Variant
v1 = lBytesPerCluster
v2 = lpNumberOfFreeClusters

' this now works:
? v1*v2 

可能存储15位数字的货币类型(
Dim lNumFreeBytes As Currency
)起作用:
lNumFreeBytes=CCur(lBytesPerCluster)*CCur(lpNumberOfFreeClusters)
long(在Windows 32位中称为整数)的最大值为2^15(一位用于=/-)这是2^31或2 gig。我的意思是2^31。这是有效的,因为上面v1和v2中的内部变量类型将很长。v1*v2将是双倍的。您可以通过VarType函数看到这一点(请参阅):VarType(v1)=3,VarType(v2)=3,VarType(v1*v2)=5。您最好使用显式变量类型,这样代码的可读性和可维护性就会更好。