这段时间在写一个叫做Dingcrown KD Print的软件,灰常灰常意外的发现一个BUG: 在VB6做的dll插件中copy的数据在Win7下贴上时出现乱码现象。
dll中VB6的代码:
Clipboard.SetText Addr
主程序中VB2010代码:
ProductInfo = Clipboard.GetText()
-----------------------------
看起来很正常的一段代码,一边放入剪贴板,一边取出。。。但是,事实上确实在XP下运行正常,一到WIN7就不行!
仔细去查VB6和VB2010中的Cilpboard的介绍,关于DataFormat
VB6有3种:
常数 | 值 | 描述 |
vbCFLink | &HBF00 | DDE 对话信息 |
vbCFText | 1 | (缺省值)文本 |
vbCFRTF | &HBF01 | RTF(.rtf 文件) |
VB2010则有5种:
成员名称 | 说明 | |
---|---|---|
CommaSeparatedValue | 指定以逗号分隔值 (CSV) 的格式,这是电子表格常用的交换格式。 | |
Html | 指定由 HTML 数据组成的文本。 | |
Rtf | 指定由 RTF 数据组成的文本。 | |
Text | 指定标准 ANSI 文本格式。 | |
UnicodeText | 指定标准 Windows Unicode 文本格式。 |
很明显VB2010增加了2种,其中新增了一个UnicodeText。那么问题就清晰了...
VB6的SetText放入的格式只能是唯一的格式Text(即ANSI Text),但是在VB2010中,就有2种可能ANSI Text或Unicode Text
在XP下一切正常,表明VB2010的GetText是以ANSI Text的格式从剪贴板中取出的。但在WIN7下乱码了。。。表明它是以Unicode Text格式取出的。。。放入ANSI取出Unicode,不乱才怪
ProductInfo = Clipboard.GetText(TextDataFormat.Text)
再试着运行一下,不论是XP还是Windows7,一切正常!
------------------------------------
此BUG给我们的2点启示是:
1. 从VB6升级到VB2010吧。。它更“真”地支持Unicode --- 关于为什么用真,有玄机哦~ :)
2. 从XP升级到WINDOWS7吧。。它默认就Unicode。。Unicode才是王道!