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

у меня есть документация, где написано, что имя пользователя, IP и пароль должны быть const char* и когда я ставлю varaibles в 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, есть Character set выбор. Выберите из:

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

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

"hello"

типа const char*, тогда как:

L"hello"

is типа 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() функции