2014-09-27 64 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()功能

相關問題