Читаю значение реестра, как это:C++ чтения реестра значение строки в символ *
char mydata[2048];
DWORD dataLength = sizeof(mydata);
DWORD dwType = REG_SZ;
..... open key, etc
ReqQueryValueEx(hKey, keyName, 0, &dwType, (BYTE*)mydata, &dataLength);
Моя проблема в том, что после этого, содержание MYDATA выглядит следующим образом: [63, 00, 3А, 00, 5C, 00 ...], т.е. это выглядит как unicode?!?!.
Мне нужно как-то преобразовать это как нормальный массив символов без этих [00], поскольку они не имеют простую функцию ведения журнала, которую я имею. То есть если я вызываю так: WriteMessage (mydata), он выводит только «c», который является первым символом в реестре. У меня есть вызовы этой функции ведения журнала повсюду, поэтому я бы лучше не изменять его, а как-то «исправить» значение реестра. Вот функция журнала:
void Logger::WriteMessage(const char *msg)
{
time_t now = time(0);
struct tm* tm = localtime(&now);
std::ofstream logFile;
logFile.open(filename, std::ios::out | std::ios::app);
if (logFile.is_open())
{
logFile << tm->tm_mon << '/' << tm->tm_mday << '/' << tm->tm_year << ' ';
logFile << tm->tm_hour << ':' << tm->tm_min << ':' << tm->tm_sec << "> ";
logFile << msg << "\n";
logFile.close();
}
}
Код, который я использовал: WideCharToMultiByte (CP_NONE, 0, (LPCWSTR) keyval, -1, ascii, asciil, NULL, NULL); –
Если вам действительно не нужно создавать свой проект с использованием свойства набора символов, установленного в Unicode (по умолчанию в VS2008), решение Maurizio, вероятно, лучше. – Ferruccio