1

我是 C# 和 USB 编程的新手。我有几个问题。我无法与之通信。这是我声明 GUID 以获取 GUID 的方式。我正在创建一个新的 GUID 实例,然后调用 HidGuid 来获取 Guid。下面是它的 pInvoke 方法。但是如何验证我得到的 GUID 是否有效/正确。有没有办法将此结构转换为字符串。如果是这样,如何。让我知道。谢谢。

private GUID MYguid = new GUID();
HidGuid();

public unsafe void CT_HidGuid()
// 1.Data1 = 1293833650
//Data2 = 61807
//Data3 = 4559
//data4 = 136 203 0 17 17 0 0 48
// hex values  4d1e55b2 f16f 11cf 7be03c74ac80
{                              
    HidD_GetHidGuid(ref MYguid);  
}
[DllImport("hid.dll", SetLastError = true)]
static extern unsafe void HidD_GetHidGuid(ref GUID lpHidGuid);

public unsafe struct GUID
{
    public int Data1;
    public System.UInt16 Data2;.
    public System.UInt16 Data3;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
    public byte[] data4; 
}
4

4 回答 4

2

P/Invoke 层将为您将 C Guids 转换为 C# guids。您可以像这样调用您的 pinvoke 函数

[DllImport("hid.dll", EntryPoint="HidD_GetHidGuid", SetLastError=true)]
static extern void HidD_GetHidGuid(out Guid hidGuid);

然后,您将能够只使用托管C# Guid 类并与之进行比较。

查看网站pinvoke.net,他们为许多 Windows API 调用提供了预制签名。

于 2012-10-02T15:34:59.560 回答
1

设备 GUID 与设备类接口 GUID 不同。对于 HID 设备类 pInvoke 应返回以下内容:

GUID_DEVINTERFACE_HID {4D1E55B2-F16F-11CF-88CB-001111000030}

msdn 上更有趣的 GUID 在这里

本指南非常适合 HID 编程入门:链接。来源也可用。

于 2012-12-20T20:34:51.220 回答
0

您好 Scott Chamberlain,“HidD_GetHidGuid”返回的 GUID 与系统类 GUID 不同。让我知道

于 2012-10-02T18:08:55.517 回答
0

你真的需要使用 PInvoke 来生成 GUID 吗?为什么不使用 System 命名空间中的 Guid.NewGuid() 方法?

http://msdn.microsoft.com/en-us/library/system.guid.newguid.aspx

于 2012-10-02T15:33:11.993 回答