API函数GetDiskFreeSpaceEx的参数是三个结构,这三个结构要使用64位的整数,不然返回值就不正确了。可是我在PB里面能找到的最长的Unsigned Long也只能容纳32位整数,最大是4,294,967,295,也就是说只能计算约4G的容量,再多就完蛋了。
哪位大虾能告诉我该怎么办吗?
用C++去做个DLL, 然后调用函数吧.
用API函数GetDiskFreeSpaceEx
可以获取每簇中扇区数、每扇区中字节数、剩余簇数、总簇数
这四个数据均不会超过32位整数限制
总字节数 = 每簇中扇区数*每扇区中字节数*总簇数
可能超过4G
兄弟写了个小程序
你试试是否能够使用下面的小程序计算大数相乘
其中as_a、as_b是两个乘数,字符串型
返回值也是字符串型
你试试吧
LONG ll_Len_A,ll_Len_B,ll_RetLen,ll_result,ll_carry
LONG ll_index_A,ll_index_B
CHAR ls_A[],ls_B[],ls_val[],lc_set
STRING ls_ret
ls_A = as_A
ls_B = as_B
ll_Len_A = Len(as_A)
ll_Len_B = Len(as_B)
ll_RetLen = ll_Len_A + ll_Len_B
ls_val = Fill(0,ll_RetLen)
FOR ll_index_B = ll_Len_B TO 1 STEP -1
ll_carry = 0
FOR ll_index_A = ll_Len_A TO 1 STEP -1
ll_result = (Asc(ls_A[ll_index_A]) - 48) * (Asc(ls_B[ll_index_B]) - 48) + ll_carry + ASC(ls_val[ll_index_B + ll_index_A]) - 48
lc_set = Right(String(ll_result,00),1)
ll_carry = Long(Left(String(ll_result,00),1))
ls_val[ll_index_B + ll_index_A] = lc_set
NEXT
ls_val[ll_index_B] = Right(String(ll_carry,00),1)
NEXT
IF ls_val[1] = 0 THEN
ls_val = Right(ls_val,ll_retlen - 1)
END IF
RETURN ls_val
如果是结构,就好说了。比如:
us_1{
long a
64位 b
}
等价于
us_2{
long a
long b1
long b2
}
你传给API函数效果一样,不过: b2是高32位,b1是低32位。
返回后计算成decimal或double之类的就可以了。