首页
社区
课程
招聘
VB的VarAdd为什么返回FFFF开头的数据呢?
发表于: 2005-1-18 17:53 4390

VB的VarAdd为什么返回FFFF开头的数据呢?

nig 活跃值
4
2005-1-18 17:53
4390
在看一个软件时发现:
Var1   D001    整型
Var2   1       长整
执行VB的VarAdd
返回 FFFFD002
这是个什么意思呢.
之后再变成字符串时就变成了负数了.

另外,在DELPHI中如果将WIDESTRING字符还原成ANSISTRING字符,这个VB的程序
转换起来真是很麻烦.
有兄弟知道,麻烦告诉一声!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 413
活跃值: (637)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
未找到合适的函数,只好用语句自己来完成了.

A:widestring;
B:AnsiString;
i:integer;
begin
  b:=ansistring(A);  //完成WideString到AnsiString的转换.
  i:=ord(B[1])*256+ord(B[2]);
  i:=i-65536;
end;
//中间尝试过多个函数,都不好用,本想用integer直接进行数据类型转换.
//可是生成的结果总是不对.原因未找到.
//ole.varadd中,出现的是movsx esi,[**],
//这样到Esi中的值就变成了FFFF****了,我很疑惑,(因为我菜,呵呵),为什么
//转换出来的数据就变了呢,数据类型试过不少,包括SmallInt,都无法完成
//正确的转换结果.
//此种做法的稳定性,我还要明天进行细致的测试才知道是否可靠.如果
//还有问题,我会发上来.如果兄弟们也遇到此类问题,仅供参考吧.

//VB中用的多是wideString类的字符,文字,英文字符,进行转换计算时和
//Delphi的对应不好,因为没有办法.只好自己动手了.
2005-1-18 22:40
0
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
3
WideCharToString不行吗?

我没用过,是翻system.pas看到的。
2005-1-19 08:09
0
雪    币: 413
活跃值: (637)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
我试过的,整个为这种转换花了近一天的时间,最后只好自己写程序来完成,另外,在VB中用vbaAnsiValueBstr 来进行转换.

但用上述的方法,搞定了,而且从测试的情况看,效果不错.
支持中文+英文混.
但在用时要求一个区别,英文ansiString之后一个字长,中文是2个字长.
2005-1-19 09:37
0
雪    币: 279
活跃值: (435)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
最初由 nig 发布
在看一个软件时发现:
Var1 D001 整型
Var2 1 长整
执行VB的VarAdd
返回 FFFFD002
........


VarAdd 变体变量相加
VB中的整数是用16位来表示的,因此看返回结果时取低16位就可以了。
高位可能是符号扩展。
2005-1-19 10:16
0
游客
登录 | 注册 方可回帖
返回
//