这段时间在写一个叫做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,不乱才怪
于是,将VB2010中的代码稍作修改:
ProductInfo = Clipboard.GetText(TextDataFormat.Text)
再试着运行一下,不论是XP还是Windows7,一切正常!
------------------------------------
此BUG给我们的2点启示是:
1. 从VB6升级到VB2010吧。。它更“真”地支持Unicode --- 关于为什么用真,有玄机哦~ :)
2. 从XP升级到WINDOWS7吧。。它默认就Unicode。。Unicode才是王道!
VB6到VB2010剪贴板操作在Windows XP/7的兼容性问题及解决
VB6编写的DLL在Win7下通过Clipboard.SetText复制的数据出现乱码,原因是VB2010的Clipboard.GetText()默认取Unicode格式。解决方案是在VB2010中指定Clipboard.GetText(TextDataFormat.Text)以ANSI格式读取,从而确保跨平台兼容。
2745

被折叠的 条评论
为什么被折叠?



