版权声明:本文为博主原创文章,未经博主允许不得转载。 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)