在参数传递中无法将'const char *'转换为'WCHAR *'

时间:2014-09-27 10:43:59

标签: c++ 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 个答案:

答案 0 :(得分:12)

您最有可能使用其中一个Visual Studio编译器,Project Settings中有一个Character set选项。选择:

  • Unicode字符集(UTF-16),默认
  • 多字节字符集(UTF-8)
  • 未设置

调用接受Unicode设置中的字符串的函数需要您创建Unicode字符串文字:

"hello"

类型为const char*,而:

L"hello"

的类型为const wchar_t*。因此,要么将配置更改为Not set,要么将字符串文字更改为宽文字。

答案 1 :(得分:3)

对于文字,您希望在字符串中使用L,如下所示:

L"My String"

如果您可以使用宽字符进行编译,那么您可能需要考虑使用_T()宏:

_T("My String")

MS-Windows下的宽字符字符使用UTF-16格式。有关Unicode格式的更多信息,请查看Unicode website

要动态转换字符串,您需要知道char *字符串的格式。在大多数情况下,在Windows下它是Win1252,但最终并非总是如此。 Microsoft Windows支持许多8位格式,包括UTF-8和ISO-8859-1。

如果您信任区域设置,则可以使用mbstowc_s()函数。

对于其他转化,您可能需要查看MultiByteToWideChar()功能