-2

一部のデバイスのシリアル番号を取得するために 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);
4

1 に答える 1

0

あなたのコードは Delphi のすべてのバージョンで問題ありません。Unicode 以前の Delphi でコンパイルすると、明らかに UTF-16 から ANSI への変換が必要になります。ただし、Delphi 2009 を使用しているため、これは問題ではありません。

Unicode 変換に関しては問題ありません。このHidD_GetSerialNumberString関数は、NULL で終わる UTF-16 文字列を指定したバッファーに入力します。そして、まさにそれを宣言testしたので、Delphi は Delphistring変数にコピーするために必要なコードを生成します。

HidD_GetSerialNumberStringfalse を返している可能性があるため、FSerialNumber適切に初期化されていませんか? それ以外の唯一の結論は次のとおりです。

  • HidD_GetSerialNumberStringそれが戻ってきたとき、あなたに嘘をついていますTrue
  • を呼び出して返されるシリアル番号は、HidD_GetSerialNumberString実際にはÿÿÿ.
于 2013-06-17T10:58:50.147 に答える