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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wagner_zk/article/details/48465167

问题:

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)


猜你喜欢

转载自blog.csdn.net/wagner_zk/article/details/48465167