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才是王道!