Невозможно преобразовать '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*' to
WCHAR*'в передаче аргументов
Какую переменную я должен использовать для этих аргументов и как?
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()
функция