Невозможно преобразовать 'const char*' в 'WCHAR*' при передаче аргумента

У меня есть документация, где написано, что имя пользователя, IP и пароль должны быть const char* и когда я кладу варейбилс в const charЯ получаю это сообщение об ошибке.

Это мой код:

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <windows.h>

using namespace std;

typedef int (__cdecl *MYPROC)(LPWSTR);

int main()
{
    HINSTANCE hinstDLL;
    MYPROC ProcAdd;   
    hinstDLL = LoadLibrary("LmServerAPI.dll");
    if(hinstDLL != NULL){
        ProcAdd = (MYPROC) GetProcAddress(hinstDLL,"LmServer_Login");            
        if(ProcAdd != NULL){
            const char* IP = "xxx.177.xxx.23";
            const char* name = "username";
            const char* pass = "password";
            int port = 888;
            ProcAdd(IP,port,name,pass);
            system ("pause");          
        }          
    }
}

И я получил эту ошибку:

не может конвертировать const char*' toWCHAR*'в передаче аргументов

Какую переменную я должен использовать для этих аргументов и как?

2 ответа

Решение

Скорее всего, вы используете один из компиляторов Visual Studio, где в Project Settings, E сть Character set выбор. Выбери из:

  • Набор символов Unicode (UTF-16), по умолчанию
  • Многобайтовый набор символов (UTF-8)
  • Не установлен

Вызов функций, которые принимают строки в настройке Unicode, требует, чтобы вы сделали строковые литералы Unicode:

"hello"

Имеет тип const char*, в то время как:

L"hello"

имеет тип const wchar_t*, Так что либо измените свою конфигурацию на Not set или измените строковые литералы на широкие.

Для литералов вы хотите использовать L на строке как в:

L"My String"

Если вы можете скомпилировать в широком символе или нет, то вы можете рассмотреть возможность использования _T() макрос вместо:

_T("My String")

Широкие строковые символы в MS-Windows используют формат UTF-16. Для получения дополнительной информации о форматах Unicode, смотрите на сайте Unicode.

Чтобы динамически преобразовать строку, вам нужно знать формат вашего char * строка. В большинстве случаев под Windows это Win1252, но определенно не всегда. Microsoft Windows поддерживает множество 8-битных форматов, включая UTF-8 и ISO-8859-1.

Если вы доверяете настройке локали, вы можете использовать mbstowc_s() функции.

Для других конверсий вы можете посмотреть на MultiByteToWideChar() функция

Другие вопросы по тегам