javascript无法对com返回的64位整数比较大小

问题:

var vm = __g.project.packGetInfo("d:\\tttt\\", false);
if(vm["isOK"]{
    var totalSize = vm["resTotalSize"];
    var freeSize = vm["diskFreeSize"];
    alert(typeof(totalSize));
    alert(typeof(freeSize));
    if(totalSize > freeSize)
          alert("磁盘空间不足");
}
其中,__g.project.packGetInfo 是COM接口,定义为:FB:VariantMap PackGetInfo(wstring Path, bool IgnoreBigDataFile);

实现里有声明变量:
unsigned long long diskFreeSize, resTotalSize;
unsigned long resFileNumber;


上述js代码在firefox和chrome里均能正常运行,typeof(totalSize) 返回 string。
在IE里  返回unknown。在执行到比较大小那句,IE报错“totalSize不是数字”。



摸索:

曾试过将totalSize作为参数构造一个Number,也是报错。

baidu得知两点:

1. unknown是com类型转换存在问题;

http://stackoverflow.com/questions/10982739/typeof-returning-unknown-in-ie

2. js没有64位整数,比较大小得通过别的办法;

http://www.sharejs.com/tutorial/tutorial_class/10042


解决方案:

在c++里封装比较64位整数大小的方法,在js里调用

int compareUInt64(FB::variant n1, FB::variant n2)
{
   unsigned __int64 _n1 = n1.convert_cast<unsigned __int64>();
   unsigned __int64 _n2 = n2.convert_cast<unsigned __int64>();
    return (_n1 == _n2)? 0:(_n1>_n2? 1: -1);
}
js里调用:

__g.internalTool.compareUInt64(totalSize , freeSize) >= 0)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值