web-dev-qa-db-ja.com

引数の受け渡しで「constchar *」を「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*' toWCHAR * 'を変換できません

これらの引数にはどの種類の変数をどのように使用する必要がありますか?

7
DTDest

Visual Studioコンパイラの1つを使用している可能性が高く、Project SettingsにはCharacter setの選択肢があります。から選ぶ:

  • Unicode文字セット(UTF-16)、デフォルト
  • マルチバイト文字セット(UTF-8)
  • 設定されていません

Unicode設定で文字列を受け入れる関数を呼び出すには、Unicode文字列リテラルを作成する必要があります。

"hello"

タイプはconst char*ですが、次のようになります。

L"hello"

タイプはconst wchar_t*です。したがって、構成をNot setに変更するか、文字列リテラルを幅の広いものに変更してください。

15
the swine

リテラルの場合、次のように文字列でLを使用します。

_L"My String"
_

ワイド文字でコンパイルするかどうかに関係なく、代わりに_T()マクロの使用を検討することをお勧めします。

__T("My String")
_

MS-Windowsでの幅の広い文字列文字は、UTF-16形式を使用します。 Unicode形式の詳細については、 nicode Webサイト を参照してください。

文字列を動的に変換するには、_char *_文字列の形式を知っている必要があります。ほとんどの場合、WindowsではWin1252ですが、常にそうであるとは限りません。 Microsoft Windowsは、UTF-8やISO-8859-1を含む多くの8ビット形式をサポートしています。

ロケール設定を信頼する場合は、 mbstowc_s() 関数を使用できます。

他の変換については、 MultiByteToWideChar() 関数を確認することをお勧めします

3
Alexis Wilke