PB中如何表示64位变量;

balloonman2002 2002-12-16 12:31:55
即:API中:
Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" _
Alias "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, _
lpFreeBytesAvailableToCaller As Currency, _
lpTotalNumberOfBytes As Currency, _
lpTotalNumberOfFreeBytes As Currency) As Long

其中的CURRENCY在VB中是64位变量,PB中的LONG是32位,则如何在PB中表示?
...全文
78 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dotnba 2002-12-24
  • 打赏
  • 举报
回复
:)
balloonman2002 2002-12-24
  • 打赏
  • 举报
回复
呵呵,前两天没时间上网,今天才有机会,:)

在此首先感谢HJD_CW大侠及各位同仁、朋友,:)

HJD_CW大侠的方法确实可行,补充一点的是:提这个问题也怪我当初没看清下载的例子,里面是VB的例子,共下了两篇,其中一篇用的是上文的CURRENCY型变量,还有一篇用的是自定义的STRUCTURE:LARGE-INT,当时我也没注意以为,糊里糊涂的认为LARGE-INT是某种内置数据类型,:),其实后来发现是:type large-int low long;high long end type 这样一个结构体,:)

这种方法其实和HJD_CW大侠的方法是一个道理,这种方法也可以用一个LONG型数组来代替,即:
FUNCTION long GetDiskFreeSpaceExA(String lpDirectoryName,ref long lpFreeBytesAvailableToCaller[2],ref long lpTotalNumberOfBytes[2],ref long lpTotalNumberOfFreeBytes[2]) LIBRARY "kernel32.dll"

最后只要用lpTotalNumberOfBytes[2]*2^32+lpTotalNumberOfBytes[1]即可;

依此类推,还可以声明成INTEGER XXX[4]这样的形式,或者4个INTEGER组成的STRUCTRUE,;)

在此也向PBHOME.NET的MKOB斑竹表示感谢,曾向我推荐此方法,只是当时不理解,现在看来还是可行,,,:),,,
dotnba 2002-12-20
  • 打赏
  • 举报
回复
学习!
hjd_cw 2002-12-20
  • 打赏
  • 举报
回复
1.先这样声明函数
FUNCTION long GetDiskFreeSpaceExA(String lpDirectoryName,ref char lpFreeBytesAvailableToCaller[8],ref char lpTotalNumberOfBytes[8],ref char lpTotalNumberOfFreeBytes[8]) LIBRARY "kernel32.dll"

2.再这样调用:

string ls_return

Long Status
double tb,ld_256,ld_base,ld_add
double ld_1G,ld_1M,ld_1K
char TBs[8],FBs[8],ABs[8]
String cmdline


Status = GetDiskFreeSpaceExA('c:\', ABs,TBs, FBs)
int i
ld_256 = 256
for i = 1 to 8
ld_base = ld_256 ^ (i - 1)
ld_add = asc(fBs[i]) * ld_base
tb = tb + ld_add
next
LD_1G = 1024 * 1024 * 1024
LD_1M = 1024 * 1024
LD_1K = 1024
if tb > ld_1g then
ls_return = string(round(tb/ld_1g,2)) + ' GB'
elseif tb > ld_1m then
ls_return = string(round(tb/ld_1m,2)) + ' MB'
elseif tb > ld_1k then
ls_return = string(round(tb/ld_1K,2)) + ' KB'
else
ls_return = string(tb) + ' Byte'
end if
return ls_return

以上代码以字符串方式返回C盘的剩余空间。
balloonman2002 2002-12-17
  • 打赏
  • 举报
回复
GetDiskFreeSpace确实是LONG就行了,但是GetDiskFreeSpaceEx就不行,用LONG就

取不到数,大家也可以实验一下,:)
xuebuctxy 2002-12-17
  • 打赏
  • 举报
回复
见过的所有资料都是定义成long
wu_07 2002-12-17
  • 打赏
  • 举报
回复
不知道,反正参考资料中是这样定义的

FUNCTION ulong GetDiskFreeSpace(ref string lpRootPathName,ref ulong lpSectorsPerCluster,ref ulong lpBytesPerSector,ref ulong lpNumberOfFreeClusters,ref ulong lpTtoalNumberOfClusters) LIBRARY "kernel32.dll" ALIAS FOR "GetDiskFreeSpaceA"
dotnba 2002-12-17
  • 打赏
  • 举报
回复
Ulong不行?
0 to 4294967295 = 40亿 = 40万万 = 400千万= 4千M = 4G
那么不知道
dec{0}可以不可以,好象可以精确到18位,那么就是.....不知道可以不可以传进去?您试试
再不至于就用DOUBLE
ice2water 2002-12-16
  • 打赏
  • 举报
回复
up
dotnba 2002-12-16
  • 打赏
  • 举报
回复
为了放分吗?
那就谢谢了
dotnba 2002-12-16
  • 打赏
  • 举报
回复
啥意思?
balloonman2002 2002-12-16
  • 打赏
  • 举报
回复
继续UP啊,:)

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧