Zeichenkette und LPCWSTR



  • Hallo,

    beim Erstellen eines Fensters erscheint ne Fehlermeldung, wenn eine const char
    Zeichenkette als Parameter eingesetzt wird :

    "cannot convert parameter 4 from 'const char [26]' to 'LPCWSTR'"

    Durch Casten (LPCWSTR)textkonstantenname sind nur Striche und Punkte zu sehen
    anstatt den Text.

    Wie kann man Zeichenketten nutzen, ohne sie casten zu müssen ?

    Im Code : Zeile 9 und 12.

    LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	   switch (message)
       {
    		case WM_PAINT:
          {
    		PAINTSTRUCT ps;
    		HDC         hDC; //Handle auf Zeichenbereich
    		const char  szText[] = "Hallo, dies ist der Text.";
    		hDC = BeginPaint(hWnd, &ps);
             {
    			TextOut(hDC, 50, 50,(LPCWSTR)szText , sizeof(szText) - 1);
    		 }
    		EndPaint(hWnd, &ps);
    		return 0;
    	  }
    
    		case WM_DESTROY:
          {
             PostQuitMessage(0);
             return 0;
          }break;
       }
    	   return DefWindowProc(hWnd, message, wParam, lParam);
    }
    

    VIELEN DANK im Voraus



  • mach mal aus

    const char  szText[] = "Hallo, dies ist der Text.";
    

    einfach

    const wchar_t  szText[] = L"Hallo, dies ist der Text.";
    

    du solltest dir mal ansehen, was der unterschied zwischen LPCWSTR und LPCTSTR, etc. ist.
    beziehungsweise der unterschied zwischen unicode- und multibyte-chars



  • hi,
    mach besser so:

    TCHAR text = _T("Hallo, hier auch Text wa ey." );
    

    es sei denn du machst ganz spezielle, nicht einheitliche geschichten.
    grüeßlie.



  • TCHAR text = _T("Hallo, hier auch Text wa ey." );
    
    TextOut(hDC, 50, 50,text , sizeof(text) - 1);
    

    error C3861: '_T': identifier not found.
    error C2664: 'TextOutW' : cannot convert parameter 4 from 'TCHAR' to 'LPCWSTR'.

    Bei Deklaration mit wchar_t erscheint der Text, aber auch unerwünschte Zeichen
    dahinter.



  • Ich hab doch gesagt, du sollst dich zu Unicode informieren.. sizeof(text) funktioniert bei einem wchar_t nicht mehr unbedingt richtig..


  • Mod

    _countof statt sizeof verwenden:

    BTW: Interssante Implementierung:

    /* _countof helper */
    #if !defined(_countof)
    #if !defined(__cplusplus)
    #define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
    #else
    extern "C++"
    {
    template <typename _CountofType, size_t _SizeOfArray>
    char (*__countof_helper(UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
    #define _countof(_Array) sizeof(*__countof_helper(_Array))
    }
    #endif
    #endif
    


  • Consideration schrieb:

    Bei Deklaration mit wchar_t erscheint der Text, aber auch unerwünschte Zeichen
    dahinter.

    sorry, hab den index-operator vergessen:
    TCHAR text**[]** = _T("Hallo, ich bin ein Array, kein einzelnes Zeichen!" );

    TCHAR text[]   = _T("Hallo, ich bin ein Array, kein einzelnes Zeichen!" );
    	TextOut (hDC, 0,0,text, sizeof(text)/sizeof(TCHAR) );
    	MessageBox ( NULL, text, text, MB_OK );
    


  • sizeof(text)/sizeof(TCHAR) -1 🙄


Anmelden zum Antworten