본문 바로가기
코드/c/c++

GUID를 문자열로... 문자열을 GUID로

by WeZZ 2008. 10. 9.




먼저 GUID를 만드는 함수는 저번에 설명한바와 같이 CoCreateGuid()가 있다.

그리고 이렇게 생성된 GUID(128bit)를 우리가 알아볼수 있는 문자열로 바꾸는 함수가 StringFromGUID2()이다.

int StringFromGUID2(REFGUID rguid, LPOLESTR lpsz, int cbMax);
REFGUID rguid : 입력될 GUID 구조체의 포인터
LPOLESTR lpsz : 리턴될 OLECHAR (미리 버퍼를 할당해야한다.)
int cbMax : lpsz 에 할당된 버퍼의 크기

위함수를 이용하여 우리가 임의로 만든 GUID를 String으로 바꾸어 출력해 보자.

GUID guid; // GUID가 저장될 구조체 
wchar_t wszCLSID[129]; // GUID의 문자열이 저장될 구조체 
CoCreateGuid(&guid); // GUID 생성 
StringFromGUID2(guid,  wszCLSID, 128); // 문자열로 변환 

USES_CONVERSION; 

OutputDebugString(OLE2A(wszCLSID)); // 출력 
결과:

{7DD22961-78EE-4B66-8766-F6B388F6B9DD}

위와 같이 "{}"가 붙어 있음에 주의하자!

다시 이러한 GUID문자열을 GUID 구조체로 바꿔보자.
이러한 기능을 수행하는 함수가 CLSIDFromString()이다.

HRESULT CLSIDFromString(LPOLESTR lpsz, LPCLSID pclsid);
LPOLESTR lpsz : OLECHAR로 입력된 문자열
LPCLSID pclsid : 리턴될 GUID 구초체의 포인터

다음과 같이 문자열을 변환시켜 보겠다.

CLSID clsid; 
USES_CONVERSION; 
CLSIDFromString(A2OLE("{DC582E1F-35DD-4b3e-9D0C-E78DFF487131}"), &clsid); 
example..
CLSID pclsid;
OLECHAR* pszYourGUID = L"D30C1661-CDAF-11D0-8A3E-00C04FC9E26E"

LPOLESTR pszGUID = new OLECHAR[MAX_PATH];
wcscpy(pszGUID, L"{"); wcscat(pszGUID, pszYourGUID); wcscat(pszGUID, L"}");
HRESULT hr = CLSIDFromString( pszGUID,
&pclsid);
//[펌]www.debuglab.com