코드/c/c++

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

WeZZ 2008. 10. 9. 02:11




먼저 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