Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Chris2130

Frischling

  • »Chris2130« ist der Autor dieses Themas

Beiträge: 49

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

1

29.04.2009, 15:02

WinAPI

Hallo, ich habe mir ein Tutorial rausgesucht für Winapi und das als Windows-Anwendung in VC++E 2008 compiliert.

Dabei kamen folgende Fehler:

C-/C++-Quelltext

1
2
3
4
5
6
1>testprog.cpp(26) : error C2440: '=': 'const char [33]' kann nicht in 'LPCWSTR' konvertiert werden
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>ctestprog.cpp(41) : error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [33]' in 'LPCWSTR' nicht möglich
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>testprog.cpp(65) : error C2664: 'TextOutW': Konvertierung des Parameters 4 von 'const char [26]' in 'LPCWSTR' nicht möglich
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.


So sieht der eigentliche code aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "stdafx.h"
#include "testprog.h"
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

const char szAppName[]    = "Textausgabe im Anwendungsbereich";

int WINAPI WinMain(  HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     PSTR szCmdLine, int iCmdShow)
{
   MSG        msg;
   HWND       hWnd;
   WNDCLASS   wc;
   
   wc.style               = CS_HREDRAW | CS_VREDRAW;
   wc.lpfnWndProc         = WndProc;
   wc.cbClsExtra          = 0;
   wc.cbWndExtra          = 0;
   wc.hInstance           = hInstance;
   wc.hCursor             = LoadCursor(NULL, IDC_ARROW);
   wc.hIcon               = LoadIcon(NULL, IDI_APPLICATION);
   wc.hbrBackground       = (HBRUSH) GetStockObject(WHITE_BRUSH);
   wc.lpszClassName       = szAppName;
   wc.lpszMenuName        = NULL;
   
   RegisterClass(&wc);
   
   hWnd = CreateWindow(   szAppName,
                          szAppName,
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT,
                          CW_USEDEFAULT,
                          CW_USEDEFAULT,
                          CW_USEDEFAULT,
                          NULL,
                          NULL,
                          hInstance,
                          NULL);
                          
   ShowWindow(hWnd, iCmdShow);
   UpdateWindow(hWnd);
   
   while (GetMessage(&msg, NULL, 0, 0))
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }
   return msg.wParam;
}

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

physX

Treue Seele

Beiträge: 119

Wohnort: Dresden

  • Private Nachricht senden

2

29.04.2009, 15:12

Wenn du statt const char[], LPCTSTR bzw. LPCWSTR verwendest sollte das funktionieren.
also in deinem Beispiel

C-/C++-Quelltext

1
LPCWSTR szAppName = "blubber die blub"

gruss

Chris2130

Frischling

  • »Chris2130« ist der Autor dieses Themas

Beiträge: 49

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

3

29.04.2009, 15:21

Hab es geändert, allerdings steht jetzt immernoch der Fehler:

C-/C++-Quelltext

1
2
error C2440: 'Initialisierung': 'const char [26]' kann nicht in 'LPCWSTR' konvertiert werden
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

Da, obwohl ich const char ersetzt habe

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

4

29.04.2009, 15:25

Signaturen werden überbewertet

physX

Treue Seele

Beiträge: 119

Wohnort: Dresden

  • Private Nachricht senden

5

29.04.2009, 15:25

hast du auch die variable szText umgestellt? die ist in dem code noch mit
const char deklariert

ansonsten hier mal die definition der WIN strukturen anschauen.
http://msdn.microsoft.com/en-us/library/ms633577(VS.85).aspx

6

29.04.2009, 18:16

Quatsch mit Soße (physX). Evtl. einfach mal drauf achten das UNICODE angestellt ist. Entweder man nutzt durchgehen explizit die ANSI o. UNICODE-Versionen der Funktionen und Typen oder man nimmt die TCHAR-Varianten.

Strings müssen bei UNICODE durch ein L eingeleitet werden (L"sample"). Bei exklusiver Nutzung von UNICODE also einfach L vorsetzen, ansonsten _T o. TEXT-Makro nutzen.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige