2010-10-14 1 views
0

Я хочу прочитать значение из реестра, используя следующий метод:Как конвертировать CString LPSTR

char* cDriveStatus=ReadFromRegistry(HKEY_CURRENT_USER,_T(NDSPATH),m_szDriveName); 

Я попытался преобразования с использованием GetBuffer, m_szDriveName.GetBuffer(0), но это еще раз показывает ошибки:

error C2664: cannot convert parameter 3 from 'wchar_t *' to 'LPSTR'

Редактировать : Декларация о методе и переменной приведена ниже:

char* ReadFromRegistry(HKEY,LPCTSTR,LPSTR); 
CString  m_szDriveName; 
+0

Обратите внимание, что из ошибок компилятора вашего CString, кажется, CStringW (основано на wchar_t) в то время как ваш ReadFromRegistry ожидает LPTSR, основанный на голец, а не LPWSTR на основе wchar_t , – anno

ответ

0

Это то, что работает для меня:

char* cDriveStatus=ReadFromRegistry(HKEY_CURRENT_USER,_T(NDSPATH),(LPSTR)m_szDriveName.GetBuffer(m_szDriveName.GetLength())); 
+0

Это не делает то, что вы думаете. –

1

Ваши настройки сборки выглядят как «Юникод» (на основе ссылки на wchar_t) - вы можете изменить это на «Использовать многобайтовый набор символов» на странице «Общие», «Набор символов», «Свойства конфигурации вашего проекта», если использование Unicode не является ваше намерение.

Чтобы просмотреть свойства своего проекта, щелкните правой кнопкой мыши проект в обозревателе решений и выберите «Свойства».

Вы можете найти ATL class CRegkey, который полезен при правильном извлечении значений из реестра в зависимости от их типа.

+0

Пробовал, но эта помощь помогает, поскольку я использую static const wchar_t несколько мест, и она показывает ошибку – Simsons