Probleme mit VC++ Express Edition
-
hi,
ich wollte nun von KonsolenAnwendungen auf WindowsAnwendungen umsteigen und hab dazu Microsoft Visual c++ Express Edition installiert und auch die Plattform SDK!
(nach Anleitung auf http://www.germangamedev.de/index.php?site=article&id=28)
Nun hab ich mir folgende Tutorials angeschaut
http://pronix.linuxdelta.de/C/win32/win32_1.shtml
http://www.henkessoft3000.de/
bekomme jedoch beim Erstellen des Hello World Programm folgende Fehlermeldung:1>d:\visual studio 2005\projects\hello world\hello world\main.cpp(25) : error C2440: '=': 'LPCSTR' 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>d:\visual studio 2005\projects\hello world\hello world\main.cpp(26) : error C2440: '=': 'LPCSTR' 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>d:\visual studio 2005\projects\hello world\hello world\main.cpp(43) : error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'LPCSTR' 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>d:\visual studio 2005\projects\hello world\hello world\main.cpp(56) : warning C4244: 'return': Konvertierung von 'WPARAM' in 'int', möglicher DatenverlustBeim Beispielprogramm des anderen Tutorial kommt eine ähnliche Fehlermeldung (auch falscher Typ)!
Hier ist der Code:
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LPCSTR lpszAppName = "AppName";
LPCSTR lpszTitle = "Meine erste Applikation";int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{HWND hWnd;
MSG msg;
WNDCLASSEX wc;wc.cbSize = sizeof(WNDCLASSEX);
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 = lpszAppName;
wc.lpszMenuName = lpszAppName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);if( RegisterClassEx(&wc) == 0)
return 0;hWnd = CreateWindowEx(NULL,
lpszAppName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
0,
0,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);if( hWnd == NULL)
return 0;ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);while (GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}LRESULT CALLBACK WndProc(HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam)
{
switch (umsg)
{
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWnd, umsg, wParam, lParam);
}Woran könnte das liegen? Hab ich evt. doch etwas falsch installiert?
-
Du hast wahrscheinlich in den Projekteigenschaften Unicode eingestellt, dein Code ist aber für MultiByte...
projekt->Eigenschaften->Allgemein->Projektstandarts->Zeichensatz->MultiByte-Zeichensatz verwenden
-
Du versuchst als UNICODE zu kompilieren. Du kannst entweder in den Projekt Einstellungen UNICODE Kompilierung abstellen oder du ersetzt die LPCSTR mit LPCTSTR und benutzt das _T() oder _TEXT() makro für die Zeichenketten.
-
Vielen Dank, jetzt funktioniert alles!
Ist die Warnung
1>d:\visual studio 2005\projects\hello world\hello world\main.cpp(56) : warning C4244: 'return': Konvertierung von 'WPARAM' in 'int', möglicher Datenverlustdenn schlimm oder kann ich die einfach ignorieren?
-
Nein, zumindest sagt die Doku ja, dass dies so gemacht werden soll. Mach halt einen Cast
return (int) msg.wParam;und dann gibt sich dein Compiler damit zufrieden.