Сравнение строк не работает в Visual C ++ 2005 - PullRequest
0 голосов
/ 30 марта 2009

Если получить реестр из реестра и он правильно отображается, когда я помещаю его в окно сообщения. :: MessageBoxW (0, (LPCWSTR) achValue, _T ("Найдено"), MB_YESNO);

Значение хранится в archValue, который является DWORD. Я хочу сравнить его со следующей строкой "2.0.7045.0", но strcmp не работает для меня.

Буду очень признателен за любые идеи о том, как это сделать. Довольно мусор на C ++, и я не могу отладить легко, как в DLL.

Очень ценится

Tony

Ответы [ 3 ]

2 голосов
/ 30 марта 2009

Вам необходимо использовать версию strcmp с широким символом: wcscmp .

0 голосов
/ 30 марта 2009

У тебя адская смесь струн.

MessageBoxW - работает со строками Unicode.
_T("Found") - макрос, который добавляет спецификатор юникода при необходимости (зависит от определения в настройках объекта).
LPCWSTR - строка в кодировке Юникод (const wchar_t*).
strcmp - сравнить строки не в юникоде.

Вы должны использовать один тип всех функций. w или t или не-Unicode строки.

0 голосов
/ 30 марта 2009

Вопрос запутанный; у вас есть проблемы с получением данных из реестра или выполнением strcmp?

Вы получаете DWORD (???) из реестра, который должен быть что-то вроде "2.0.7045.0"? Вы не уверены, что это не строка (REG_SZ)?

Если вы можете извлечь строку из реестра, вы сможете сравнить строки; помните, что strcmp (или другие подобные функции / методы) возвращают 0 (ноль), если строки равны.

...