Создание программы извлечения/компиляции в Visual C++ 2010, но с ошибками

Я создаю экстрактор/компилятор .SM2 и .RM2 для игры, но у меня проблемы с кодом. Я совсем не разбираюсь в C++, а код является исходным кодом, предоставленным первоначальным создателем. Даже в его оригинальном файле, который я не редактировал, были ошибки, но он все же сделал программу. Может ли кто-нибудь помочь мне с ошибками?

Ошибки:

Ошибка 1: ошибка C2664: «CreateDirectoryW»: невозможно преобразовать параметр 1 из «const char [25]» в «LPCWSTR».

Error2: ошибка C2664: «CreateDirectoryW»: невозможно преобразовать параметр 1 из «char *» в «LPCWSTR» (X3)

Error4: ошибка C2664: «FindFirstFileW»: невозможно преобразовать параметр 1 из «char [256]» в «LPCWSTR».

Error5: ошибка C2440: «инициализация»: невозможно преобразовать из «WCHAR [260]» в «char *»

Вот мой код, который, по-видимому, имеет ошибки:

CreateDirectory(".\\TESTFOLDER\\TESTFOLD2ER", NULL);   (This is for Error 1)

CreateDirectory(string, NULL);
break;                          (This is for Error2)


if ((hdl = FindFirstFile(asteriskpath, &data)) == INVALID_HANDLE_VALUE)
    return;       (For Error3)

char* filename = data.cFileName;
char current_dir[256];       (For Error4)

Пожалуйста, помогите, спасибо, Кэмерон Савайя


person user3150534    schedule 01.01.2014    source источник
comment
Похоже, что ваш проект настроен на unicode, когда код, который вам дали, ожидает, что проект будет установлен на многобайтовый набор символов.   -  person Retired Ninja    schedule 01.01.2014


Ответы (1)


Метод 1: установите для параметра персонажа проекта значение Use Multi-Byte Character Set:

Настроить свойства > Общие > Значения проекта по умолчанию > Набор символов > Использовать многобайтовый набор символов


Метод 2:

  • Для ошибки 1/2/4:

    Вы должны сначала преобразовать char[] в wchar_t[], прежде чем переходить к CreateDirectory() (для вашей ошибки 1 аналогично другим ошибкам 2 и 4), поскольку они используют разные типы кодировки символов. Попробуйте swprintf с флагом %hs.

    Пример:

    wchar_t  ws[100];
    swprintf(ws, 100, L"%hs", ".\TESTFOLDER\TESTFOLD2ER");
    
  • Для ошибки 5:

    Вы можете использовать функцию wcstombs для преобразования wchar_t[] в char[], см. здесь.


person herohuyongtao    schedule 01.01.2014
comment
СПАСИБО ОГРОМНОЕ. Я ПЫТАЛСЯ И ТАК ЗЛИЛСЯ, ПЫТАЯСЬ ИСПРАВИТЬ ЭТИ ОШИБКИ. СПАСИБО ОГРОМНОЕ. - person user3150534; 01.01.2014