Неожиданная строка из вызова Win32 UuidToString () - PullRequest
0 голосов
/ 21 января 2011

У меня есть простой класс, который генерирует GUID, вызывая CoCreateGuid ().Затем я передаю результат в UuidToString ().

Большую часть времени я получаю строку в формате:

e0e3e4b5-6f13-4043-b6c6-488c8b85cbd1

ОднакоНа некоторых машинах результат выглядит примерно так:

0-40: 61: 86: C2: 4E: 4F

Кто-нибудь может объяснить это неожиданное поведение?Является ли вторая форма даже GUID?

ОБНОВЛЕНИЕ: Я нашел источник ошибки, и выясняется, что UuidToString () не возвращает строку, о которой я думал, что это было.

Спасибо завсе ответы.

Ответы [ 3 ]

1 голос
/ 21 января 2011

Строго говоря, ни форма / не является / GUID, потому что GUID - это 128-битное число, а не строка. Я никогда не видел вторую форму, но я могу представить реализацию, где она будет определена как допустимая. Обычно UuidCreate, UuidFromString и т. Д. Реализованы в rpcrt4.dll, но я полагаю, у вас может быть альтернативная реализация. Передайте строку в UuidFromString и проверьте возвращаемое значение этой функции. Убедитесь, что он реализован в той же DLL, что и UuidCreate и UuidToString, которые в первую очередь дали вам этот подозрительный GUID.

1 голос
/ 21 января 2011

Bizarre. RPC - странный API, хотя он очень старый, и его особенности сильно сохранились. Я бы порекомендовал вам использовать StringFromGUID2 (). Наличие двух способов достижения одной и той же вещи всегда является показательным признаком, а позже - лучше.

1 голос
/ 21 января 2011

Предупреждение: это только предположение!

То, что у вас там, очень похоже на MAC-адрес.

CoCreateGuid в основном использует UuidCreate,Это можно использовать сетевой адаптер компьютера для создания локально уникального UUID.Я предполагаю, что на этих машинах что-то из их конфигурации сети вызывает «ошибку» или что-то, и поэтому возвращается промежуточная строка.

Вы можете попробовать использовать UuidCreate напрямую и использовать флаг RPC_S_UUID_NO_ADDRESS

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

...