2012-10-02 23 views
1

我是C#和USB編程的新手。我有幾個問題。我無法與它溝通。以下是我如何聲明GUID以獲取GUID。我正在創建一個GUID的新實例,然後調用HidGuid來獲得Guid.Below是它的pInvoke方法。但是,如何驗證我得到的GUID是有效/正確的。是否有任何方法將此結構轉換爲字符串。如果是這樣,如何。讓我知道。謝謝。在C#中GUID的pInvoke方法

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; 
} 
+0

爲什麼不使用標準的System.Guid類型? 'HidD_GetHidGuid(ref System.Guid lpHidGuid);' –

+0

如果你只是想讓你的GUID變成一個字符串,可以重寫ToString()方法。 –

回答

0

您是否確實需要使用PInvoke來生成GUID?爲什麼不使用System命名空間中的Guid.NewGuid()方法?

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

+0

我試過了。我正在獲得另一個GUID。如何確認哪一個是有效和正確的。你可以從上面的結構中看到,GUID是(十六進制值)4d1e55b2 f16f 11cf 7be03c74ac80其中,如果我按照mSDN中的說法進行操作,則會得到另一個。 – user1668957

+0

你的意思是「有效和正確嗎?」 –

+2

如果您在每次通話時要求提供NewGUID,則不應再獲取相同的通話。永遠。 –

2

的P /調用層將Ç的GUID轉換爲C#的GUID爲您服務。你可以打電話給你的PInvoke的功能,像這樣

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

然後,您將能夠只使用管理C# Guid class和比較對抗。

檢出網站pinvoke.net,他們有許多windows API調用的預製簽名。

+0

我跟着這個。但仍然無法使用WriteFile()函數「寫入」USB設備。我正在逐一檢查,因此懷疑GUID不正確。請參閱我以前的問題在這裏「http://stackoverflow.com/questions/12673875/c-sharp-writefile-unable-to-write-to-usb-hid-device」 – user1668957

0

Hello Scott Chamberlain,由「HidD_GetHidGuid」返回的GUID與系統類GUID不同。讓我知道

1

設備GUID與設備類接口GUID不相同。對於HID設備類的PInvoke應返回如下:

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

更有趣的GUID的MSDN上here

本指南適​​用於HID編程入門:link。源也可用。