将GUID结构转换为LPCSTR

时间:2013-09-01 04:41:47

标签: c windows api winapi

我在C中使用Win32 API,需要将GUID结构转换为LPCSTR。我是Win32的新手,并没有找到有关此类转换的更多信息。

我确实设法使用StringFromGUID2函数将GUID转换为OLECHAR(请参阅下面的代码片段),但仍然坚持进一步转换为LPSCSTR。我不太确定我是否正朝着OLECHAR的方向前进,但目前这似乎是合乎逻辑的事情。

GUID guid;
OLECHAR wszGuid[40] = {0};
OLECHAR szGuid[40]={0};
LPCSTR lpcGuid;
CoCreateGuid(&guid);
StringFromGUID2(&guid, wszGuid, _countof(wszGuid));

1 个答案:

答案 0 :(得分:13)

操作系统不支持直接将GUID格式化为Ansi字符串。您可以先将其格式化为Unicode字符串,然后将其转换为Ansi:

GUID guid = {0};
wchar_t szGuidW[40] = {0};
char szGuidA[40] = {0};
CoCreateGuid(&guid);
StringFromGUID2(&guid, szGuidW, 40);
WideCharToMultiByte(CP_ACP, 0, szGuidW, -1, szGuidA, 40, NULL, NULL);

或者您可以使用sprintf()或类似功能手动格式化Ansi字符串:

GUID guid = {0};
char szGuid[40]={0};
CoCreateGuid(&guid);
sprintf(szGuid, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);