8

我有文档,其中写有用户名、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*'

我必须为这些参数使用哪种变量以及如何使用?

4

2 回答 2

16

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

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

在 Unicode 设置中调用接受字符串的函数需要您制作 Unicode 字符串文字:

"hello"

是 类型const char*,而:

L"hello"

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

于 2014-09-27T10:54:38.373 回答
3

对于文字,您希望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()函数

于 2014-09-27T11:16:19.447 回答