您的位置:首页 > Web前端 > JavaScript

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

2015-09-15 11:28 555 查看
问题:

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: