2

私は c++ で長い間プログラミングを行っていませんが、学校用に Win32 アプリケーションを作成する必要があります。先生は私に多くの情報を提供してくれましたが、数日間試してみてもまだ行き詰っています.

エラー:

error C2440: '=' : cannot convert from 'const char [11]' to 'LPCWSTR'
error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char [11]' to 'LPCWSTR'
error C2664: 'TextOutW' : cannot convert parameter 4 from 'char *' to 'LPCWSTR'
IntelliSense: argument of type "char *" is incompatible with parameter of type "LPCWSTR"

他のすべてのサフが正しいかどうかはわかりませんが、今はそれらの 4 つのエラーしか表示されません

cpp ファイル:

    /* Hoofdstuk 10, User Interface */
#include "Callback_NYCM.h"

// UI
int WINAPI WinMain(HINSTANCE thisInstance,HINSTANCE prevInstance,LPSTR lpCmdLine,int nShowCmd) 
{ 
    PAINTSTRUCT ps;
    HDC hdc;
    MSG msg;
    HWND hwnd;
    WNDCLASSEX wndclassex; //struct_WNDCLASSEX via windows.h    

    // toekenning
    wndclassex.cbSize = sizeof(WNDCLASSEX); 
    wndclassex.style = CS_HREDRAW | CS_VREDRAW;
    wndclassex.lpfnWndProc = WndProc;
    wndclassex.cbClsExtra = 0;
    wndclassex.cbWndExtra = 0;
    wndclassex.hInstance = thisInstance;
    wndclassex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclassex.hCursor = LoadCursor(thisInstance,IDC_ARROW);  
    wndclassex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wndclassex.lpszMenuName = NULL;  
    wndclassex.lpszClassName = "WNDCLASSEX"; 
    wndclassex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 

    // functie aanroep
    RegisterClassEx(&wndclassex);

// IfThen -> CreateWindows
    if(!(hwnd = CreateWindowEx(NULL,"WNDCLASSEX","Hoofdstuk 10",WS_OVERLAPPEDWINDOW 
        | WS_VISIBLE,50,50,650,300,NULL,NULL,thisInstance,NULL)))  
    {  
        return 0; 
    } 
// logische structuur
while(GetMessage(&msg, NULL, 0, 0))  
{  
    if(msg.message == WM_QUIT)    
        break;   
    TranslateMessage(&msg);   
    DispatchMessage(&msg);  
}  
return (int) msg.wParam; 
};

ヘッダファイル:

 /*Hoofdstuk 10, Deelnemer.h*/ 
//Declaratie 
class Deelnemer 
{ 
private: 
    char* nm; 
public: 

//Constructor 
Deelnemer(){
}
    //Methoden = prototype 
    void Deelnemer::Invoeren();
    char* Deelnemer::WeergevenNaam();
};  
//Implemenmtatie.Invoeren 
void Deelnemer::Invoeren() 
{
    nm = "Roy"; 
}  
//.Weergeven 
char* Deelnemer::WeergevenNaam()
{ 
    return nm;
}

callback_NYCM.h:

    /*Hoofdstuk 10, Callback_NYCM*/
#include "Windows.h"
#include "Deelnemer.h"  

// prototype
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam); 

//Implementatie 
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam) 
{  
    //Constructie  
    PAINTSTRUCT ps;
    HDC hdc;
    MSG msg;
    WNDCLASSEX wndclassex;
    // HWND hwnd;
    Deelnemer deelnemer1; 


    //UI   
    switch(message)
    {
    case WM_PAINT:    
        {     
            //Functieaanroep.Initialisatie     
            deelnemer1.Invoeren();          
            //.TextOut  
            TextOut(hdc,50,50,deelnemer1.WeergevenNaam(),     
            strlen(deelnemer1.WeergevenNaam()));     
            EndPaint(hwnd,&ps);     
            return 0;   
        }    
        break;
        case WM_DESTROY:    
            {     
                PostQuitMessage(0);     
                return 0;    
            }    
            break;   
        default:    
            {     
                return DefWindowProc(hwnd,message,wparam,lparam);    
            }    
            break; 
    }
    return 0;
}

コンストラクターまたはそのようなものが間違っていて、char* Deelnemer::WeergevenNaam() の戻り値が間違っていると思います

誰かが私のコードのどこが間違っているのか説明してもらえますか?

アップデート:

アプリケーションを更新するには、"MyString" の代わりに L"MyString" など、全体で UNICODE 文字列リテラルを使用する必要があります。また、char の代わりに WCHAR/wchar_t を使用する必要があります。

しかし、私のコードでこれを行うにはどうすればよいですか?

更新 2:

それはすべての多くのエラーを解決しました!

しかし、この部分にはさらにいくつかのエラーが残っています

Deelnemer deelnemer1;   
    switch(message)
    {
    case WM_PAINT:    
        {     
            //Functieaanroep.Initialisatie     
            deelnemer1.Invoeren();          
            //.TextOut  
        TextOut(hdc,50,50,deelnemer1.WeergevenNaam(),     
            strlen(deelnemer1.WeergevenNaam()));     
            EndPaint(hwnd,&ps);     
            return 0;   
        }

したがって、エラーはオンラインです: deelnemer1.WeergevenNaam()

-TextOutW' : パラメーター 4 を 'char *' から 'LPCWSTR' に変換できません

-IntelliSense: 型 "char *" の引数は、型 "LPCWSTR" のパラメーターと互換性がありません

更新 3:

いくつかのテストの後、私は解決策を見つけました(皆さんが以下で言ったように)しかし、今はこれしか残っていません: TextOut (hdc,50,50,deelnemer1.WeergevenNaam(), // deelnemer1.weergevenNaam()
でエラー C2664: 'TextOutW' : 'const char *' からパラメータ 4 を変換できません「LPCWSTR」へ

4

5 に答える 5

2

簡単な答え - 理由の説明なし

引用符付き文字列を L"foo" に変更します

char を wchar_t に変更します

于 2013-08-27T17:08:51.890 に答える
0

私はそれが働いています。wchar_t * と L"string" を使用します。新しいプロジェクトにコピー/貼り付けするとエラーが解決したため、コードの問題は構造にありました。みんなありがとう!

于 2013-09-01T18:48:14.743 に答える
0

で「未設定」を選択することCharacter SetProject > Property > Configuration Properties > General、エラーC2440C2264.

于 2015-10-30T17:32:41.427 に答える