【发布时间】:2010-02-24 21:13:11
【问题描述】:
我正在编写一个可以与 HID 设备通信的 .NET 应用程序。我希望能够从设备固件中检索和解析制造商字符串。我知道在 hid.dll 中有一个名为 HidD_GetManufacturerString 的方法。 MSDN 对这种方法的描述如下:
BOOLEAN HidD_GetManufacturerString(
IN HANDLE HidDeviceObject,
OUT PVOID Buffer,
IN ULONG BufferLength
);
我用于此方法的包装器看起来像这样......
[DllImport("hid.dll", SetLastError = true)]
internal static extern Boolean HidD_GetManufacturerString(
SafeFileHandle hFile,
Byte[] SerialNumber,
Int32 SerianNumberLength);
我需要知道两件事。首先,我如何知道将 SerialNumber 缓冲区初始化为什么大小?当我执行 GetFeatureReport 之类的操作时,我知道缓冲区的大小,因为我可以使用 HidD_GetAttributes() 从设备属性中检索最大功能报告长度;不幸的是,这个方法没有给我任何关于制造商字符串、序列号字符串、产品名称字符串等长度的信息。
我的第二个问题是,将返回的字节数组解析为字符串的正确方法是什么?我尝试使用
System.Text.Encoding.ASCII.GetString(MfrBuffer)
但我得到了一个奇怪的结果。对于戴尔制造的产品,我的字符串看起来像这样“D\0e\0l\0l\0\0\0\0\0...”,“\0”继续到我通过的缓冲区的末尾。如何将其解析为“Dell”?
【问题讨论】: