2014-09-27 61 views
6

我有写入用户名,IP和密码必须为const char*的文档,并且当我将变量放在const char中时,我收到此错误消息。无法在参数传递中将'const char *'转换为'WCHAR *'

这是我的代码:

#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");   
     }   
    } 
} 

而且我得到了这个错误:

cannot convert const char*' to WCHAR*' in argument passing

我必须使用哪种类型的变量,这些变量又如何呢?

+0

一个'LPWSTR'又名'wchar_t的*'? – 2014-09-27 10:47:41

+0

我是新的C++,不能转换const char *'toWCHAR *'参数传递这是错误从dev ++ – DTDest 2014-09-27 10:49:42

+1

是否有某些原因'ProcAdd'需要一个'LPWSTR'如果你强制(​​根据你的问题)一个' const char *',其中常量不是字符宽度匹配? – WhozCraig 2014-09-27 10:49:50

回答

11

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

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

调用接受字符串的函数Unicode的设置要求你做出Unicode字符串:

"hello" 

const char*类型,而:

L"hello" 

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

+0

我使用开发C++编译器,我必须在此编译器中更改什么? – DTDest 2014-09-27 11:04:15

+0

对我来说这是一个非常陌生的编译器。某处可能有类似的设置。如果找不到它,只需制作文字Unicode(在你描述的错误出现的地方)。 – 2014-09-27 11:07:13

+0

此外,你的'MYPROC'有缺陷,它有一个非''constst'参数,但你传递了四个常量(端口,IP,用户和密码)。但是那个bug与你的问题无关。正确的是'typedef int(__cdecl * MYPROC)(LPCWSTR,int,LPCWSTR,LPCWSTR)'。但是,最好指向描述'LmServerAPI.dll'的接口的页面,因为使用不同的接口会导致运行时发生崩溃或未定义的行为。 – 2014-09-27 11:12:14

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()功能

相关问题