2012-10-02 2 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 Namespace의 Guid.NewGuid() 메서드를 사용하지 않는 이유는 무엇입니까?

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

+0

나는 그것을 시험해 보았다. 다른 GUID가 나타납니다. 어떤 것이 유효하고 올바른지 확인하는 방법. 당신은 위의 구조에서 볼 수 있습니다, GUID는 (16 진수 값)입니다 4d1e55b2 f16f 11cf 7be03c74ac80 어디에 내가 mSDN에서 말한대로 따라하면 또 하나 받고 있어요. – user1668957

+0

"유효하고 올바름"이란 무엇을 의미합니까? –

+2

각 통화마다 NewGUID를 요청하는 경우 동일한 번호를 다시 받아서는 안됩니다. 이제까지. –

2

P/당신을 위해 C#을 GUID를로 C GUID를 변환합니다 계층을 호출합니다. 당신은 당신이 다음 단지 관리 C# Guid class를 사용하고 비교할 수 있도록

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

같이 당신의 PInvoke 함수를 호출 할 수 있습니다.

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

안녕하세요 Scott Chamberlain, "HidD_GetHidGuid"에 의해 반환 된 GUID는 시스템 클래스 GUID와 다릅니다. 알림

1

장치 GUID가 장치 클래스 인터페이스 GUID와 같지 않습니다. HID의 디바이스 클래스의 경우 PInvoke를 다음과 같은 반환해야합니다 :

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

더 흥미로운 GUID 년대를 MSDN here에.

이 가이드는 HID 프로그래밍을 시작하기에 좋습니다 : link. 소스도 사용할 수 있습니다.