Как преобразовать CString LPstr

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

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

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

ошибка C2664: невозможно преобразовать параметр 3 из «wchar_t *» в «LPSTR»

Изменить: объявление метода и переменной приведено ниже:

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

person Simsons    schedule 14.10.2010    source источник
comment
Обратите внимание, что из ошибки компилятора ваша Cstring кажется CStringW (на основе wchar_t), в то время как ваш ReadFromRegistry ожидает LPTSR на основе char, а не LPWSTR на основе wchar_t.   -  person anno    schedule 14.10.2010


Ответы (2)


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

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

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

person Steve Townsend    schedule 14.10.2010
comment
Пробовал, но это не помогло, так как я использую static const wchar_t в нескольких местах, и это показывает ошибку - person Simsons; 15.10.2010

Вот что сработало для меня:

char* cDriveStatus=ReadFromRegistry(HKEY_CURRENT_USER,_T(NDSPATH),(LPSTR)m_szDriveName.GetBuffer(m_szDriveName.GetLength()));
person Simsons    schedule 15.10.2010
comment
Это не делает то, что вы думаете. - person Raymond Chen; 11.11.2011