C# C中GUID的pInvoke方法#

C# C中GUID的pInvoke方法#,c#,pinvoke,guid,unsafe,C#,Pinvoke,Guid,Unsafe,我不熟悉C#和USB编程。我有几个问题。我无法与它通信。以下是我如何声明GUID以获取GUID。我正在创建GUID的新实例,然后调用HidGuid来获取GUID。下面是它的pInvoke方法。但是如何验证我获取的GUID是否有效/正确。是否有方法将此结构转换为字符串。如果是,如何进行。让我知道。谢谢 private GUID MYguid = new GUID(); HidGuid(); public unsafe void CT_HidGuid() // 1.Data1 = 12938336

我不熟悉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; 
}

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


p/Invoke层将为您将C guid转换为C#guid。您可以这样调用pinvoke函数

[DllImport("hid.dll", EntryPoint="HidD_GetHidGuid", SetLastError=true)]
static extern void HidD_GetHidGuid(out Guid hidGuid);
然后,您将能够只使用托管数据并与之进行比较


查看该站点,他们为许多windows API调用提供了预制签名。

你好,Scott Chamberlain,“HidD_GetHidGuid”返回的GUID与系统类GUID不同。让我知道设备GUID与设备类接口GUID不同。对于HID设备类,pInvoke应返回以下信息:

GUID_DEVINTERFACE_HID {4D1E55B2-F16F-11CF-88CB-001111000030}
msdn上有更有趣的GUID


本指南适用于HID编程的入门:。源代码也可用。

为什么不使用标准System.Guid类型<代码>HidD_GetHidGuid(ref System.Guid lpHidGuid)如果您只想将GUID设置为字符串,请重写ToString()方法。我已经尝试过了。我得到了另一个GUID。如何确认哪一个是有效的和正确的。从上面的结构可以看出,GUID是(十六进制值)4d1e55b2 f16f 11cf 7be03c74ac80,就像我在mSDN中所说的那样,我得到了另一个GUID。如果你在每次调用中都要求一个新的GUID,你不应该得到相同的GUID。“永远!”大卫和奥斯卡,请看看是什么。它不是Guid生成器。“HidD_GetHidGuid例程返回HIDClass设备的设备接口GUID。”明白了,这是我最初的想法,但OP询问验证它是否“有效且正确”,这让我怀疑我关于他如何获得GUID的推断是否正确。如果这就是函数返回的内容,我知道没有办法检查它是否“有效”。这就是函数返回的内容。“就是这样。”我希望它是特定于机器的。我的意思是,我有一个USB鼠标和外部微芯片连接到我的电脑。我右键单击“我的电脑”->管理->设备管理器->选择电脑->右键单击电脑->属性,向下滚动我们将找到设备类GUID。我得到了一个不同的GUID,我遵循了这个。但我仍然无法使用WriteFile()函数“写入”USB设备。我正在逐一检查,因此怀疑GUID不正确。请在此处查看我的上一个问题“”