2011-01-21 2 views
0

CoCreateGuid()를 호출하여 GUID를 생성하는 간단한 클래스가 있습니다. 그런 다음 결과를 UuidToString()에 전달합니다.예기치 않은 문자열 Win32 UuidToString() 호출

내가 형식의 문자열 얻을 대부분의 시간 :

:

그러나

e0e3e4b5-6f13-4043-b6c6-488c8b85cbd1을, 몇 가지 시스템에서 결과는 다음과 같이 보입니다 0-40 : 61 : 86 : C2 : 4E : 4F

아무도이 예기치 않은 동작을 설명 할 수 있습니까? 두 번째 형식은 GUID입니까?

업데이트 : 오류의 원인을 발견했으며 UuidToString()이 내가 생각한 문자열을 반환하지 않는 것으로 나타났습니다.

모든 답변 주셔서 감사합니다.

+0

'CoCreateGuid'와'UuidToString'에서 오류 코드를 확인 했습니까? 그리고'UuidToString'보다는'StringFromCLSID'를 시도 했습니까? –

답변

1

경고 : 이것은 단지 추측입니다!

MAC 주소와 매우 흡사합니다.

CoCreateGuid은 기본적으로 UuidCreate을 사용합니다. 컴퓨터 네트워크 어댑터를 사용하여 로컬로 고유 한 UUID를 만들 수 있습니다. 내 생각 엔이 컴퓨터에서 네트워크 구성의 일부가 "버그"또는 다른 것을 유발하므로 중간 문자열이 반환됩니다.

당신은 RPC_S_UUID_NO_ADDRESS 플래그

http://msdn.microsoft.com/en-us/library/aa379205(v=vs.85).aspx

1

을 직접 UuidCreate를 사용하여 시도는 GUID는 128 비트 숫자가 아닌 문자열이기 때문에 엄밀히도 양식/인/GUID를 말할 수 있습니다. 나는 두 번째 형식을 본 적이 없지만 그것이 유효한 것으로 정의 될 구현을 상상할 수 있습니다. 일반적으로 UuidCreate, UuidFromString 등은 rpcrt4.dll에서 구현되지만 다른 구현을 할 수 있다고 가정합니다. 문자열을 UuidFromString에 전달하고 함수의 반환 값을 확인하십시오. 처음에는이 의심스러운 GUID를 제공 한 UuidCreate 및 UuidToString과 동일한 DLL에 구현되어 있는지 확인하십시오.

1

엽기. RPC는 괴상한 API이지만, 매우 오래되었고 단점은 심각하게 보존됩니다. 대신 StringFromGUID2()를 사용하는 것이 좋습니다. 같은 일을 성취 할 수있는 두 가지 방법을 갖는 것은 항상 표지판이며 나중에는 더 좋습니다.