转换Delphi 7代码以使用Delphi 2009

转换Delphi 7代码以使用Delphi 2009,delphi,delphi-2009,delphi-2010,Delphi,Delphi 2009,Delphi 2010,我有一个字符串,需要访问它的第一个字符,所以我使用了stringname[1]。在unicode支持下,这将不再有效。我得到一个错误:[DCC error]sndkey32.pas(420):E2010不兼容的类型:“Char”和“AnsiChar” 示例代码: //vkKeyScan from the windows unit var KeyString : String[20]; MKey : Word; mkey:=vkKeyScan(KeyString[1]) //来自windows

我有一个字符串,需要访问它的第一个字符,所以我使用了stringname[1]。在unicode支持下,这将不再有效。我得到一个错误:[DCC error]sndkey32.pas(420):E2010不兼容的类型:“Char”和“AnsiChar”

示例代码:

//vkKeyScan from the windows unit var KeyString : String[20]; MKey : Word; mkey:=vkKeyScan(KeyString[1]) //来自windows单元的vkKeyScan 变量 KeyString:String[20]; MKey:单词; mkey:=vkKeyScan(键串[1])
在Delphi的现代版本中,我该如何写这篇文章呢?

:您真的需要一个字符串,它等于Delphi 2009中的widestring吗

一个选择是定义 var键串:AnsiString


然后,当您获取KeyString[1]时,它将是一个AnsiChar而不是Char。

从我的脑海中消失:您真的需要一个字符串,它等于Delphi 2009中的widestring吗

一个选择是定义 var键串:AnsiString


然后,当您获取键串[1]时,它将是AnsiChar而不是Char。

类型
字符串[20]
是长度为20的短字符串,即包含20个字符的短字符串。但是短字符串的行为类似于ANSISTRING,即它们不是Unicode-一个字符就是一个字节。因此,KeyString[1]是一个AnsiChar,而vkKeyScan函数需要一个WideChar(=Char)作为参数。我真的不知道您为什么要使用类型
String[20]
而不是
String
(=
UnicodeString
),但您可以将AnsiChar
键串[1]
转换为WideChar:

mkey := vkKeyScan(WideChar(KeyString[1]))

类型
String[20]
是长度为20的短字符串,即包含20个字符的短字符串。但是短字符串的行为类似于ANSISTRING,即它们不是Unicode-一个字符就是一个字节。因此,KeyString[1]是一个AnsiChar,而vkKeyScan函数需要一个WideChar(=Char)作为参数。我真的不知道您为什么要使用类型
String[20]
而不是
String
(=
UnicodeString
),但您可以将AnsiChar
键串[1]
转换为WideChar:

mkey := vkKeyScan(WideChar(KeyString[1]))

我在最初的问题上犯了一个错误,并且已经改正了。我曾经尝试过AnsiString,但它似乎不像KeyString那样工作:AnsiString[20];谢谢你的帮助。问题恰恰相反。vkKeyScan函数需要一个WideChar!字符串[20]不是Unicode字符串,而是一个短字符串,因为“[20]”部分。我在最初的问题上犯了一个错误,已经解决了。我曾经尝试过AnsiString,但它似乎不像KeyString那样工作:AnsiString[20];谢谢你的帮助。问题恰恰相反。vkKeyScan函数需要一个WideChar!由于“[20]”部分,字符串[20]不是Unicode字符串,而是短字符串。