Delphi 2009 + HidD_GetSerialNumberString的问题

时间:2013-06-17 10:29:35

标签: delphi delphi-2009 hid

我遇到问题,让HidD_GetSerialNumberString只给我一些设备的序列号。 在某些设备上它工作正常,但在其他设备上,我得到的是“ÿÿÿ”作为序列号。 我怀疑它与Delphi 2009有关,它是unicode,但我根本无法理解它。 有解决方案吗?

编辑(声明):

type
THidD_GetSerialNumberString = function(HidDeviceObject: THandle; Buffer: PWideChar; BufferLength: Integer): LongBool; stdcall;

var
HidD_GetSerialNumberString: THidD_GetSerialNumberString;

//in the LoadHid-function
@HidD_GetSerialNumberString := GetModuleSymbolEx(HidLib, 'HidD_GetSerialNumberString', Result);

用法:

var
  test : PWideChar;
...

GetMem(test, 512);
if HidD_GetSerialNumberString(HidFileHandle, Test, 512) then
  FSerialNumber := test; //FSerialNumber is WideString
FreeMem(test);

1 个答案:

答案 0 :(得分:0)

您的代码在所有版本的Delphi中都很好。虽然很明显它涉及到由Unicode前Delphi编译时的UTF-16到ANSI转换。但是,因为您使用的Delphi 2009不是问题。

Unicode转换没有问题。 HidD_GetSerialNumberString函数使用以null结尾的UTF-16字符串填充您提供的缓冲区。由于您声明test正是如此,因此Delphi将生成复制到Delphi string变量所需的代码。

HidD_GetSerialNumberString是否可能返回false,因此FSerialNumber未正确初始化?除此之外,人们可以做出的唯一结论是:

  • HidD_GetSerialNumberString在您返回True时向您撒谎。
  • 通过调用HidD_GetSerialNumberString返回的序列号实际上是ÿÿÿ