slyys72 Temat założony przez niniejszego użytkownika |
Problem z kreacją okna w WINAPI z kursu » 2021-03-02 23:30:02 Witam, zacząłem kurs WINAPI i po stworzeniu kodu zgodnie z kursem , kod sie nie kompiluje wywalając bład w linii 4: C2440 "inicjowanie": nie można konwertować z "const char [14]" na "LPSTR" E0144 nie można użyć wartości typu "const char *" do zainicjowania jednostki typu "LPSTR" Jak to naprawić ? wstawiałem const, próbowałem wskaźnik ale nic nie działa. Może przez rzutowanie ???? To jest z kursu to powinno działac przecież :). #include <windows.h> #include<string>
LPSTR NazwaKlasy = "Klasa Okienko"; MSG Komunikat;
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASSEX wc; wc.cbSize = sizeof( WNDCLASSEX ); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); wc.lpszMenuName = NULL; wc.lpszClassName = NazwaKlasy; wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); if( !RegisterClassEx( & wc ) ) { MessageBox( NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...", MB_ICONEXCLAMATION | MB_OK ); return 1; } HWND hwnd; hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Oto okienko", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL ); if( hwnd == NULL ) { MessageBox( NULL, "Okno odmówiło przyjścia na świat!", "Ale kicha...", MB_ICONEXCLAMATION ); return 1; } ShowWindow( hwnd, nCmdShow ); UpdateWindow( hwnd ); while( GetMessage( & Komunikat, NULL, 0, 0 ) ) { TranslateMessage( & Komunikat ); DispatchMessage( & Komunikat ); } return Komunikat.wParam; }
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_CLOSE: DestroyWindow( hwnd ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, msg, wParam, lParam ); } return 0; }
|
|
DejaVu |
» 2021-03-02 23:57:34 Kurs jest bardzo wiekowy i zapewne ma jakieś błędy. W każdym razie: LPSTR to nic innego jak char*. LPCSTR to nic innego jak const char*. Jeżeli wymagana jest gdzieś nie-constowa tablica znaków, to musisz mieć zdefiniowaną tablicę np. w stylu: char twojaZmienna[ 1234 ];
Następnie robisz do niej odwołanie: jakasFunkcja( twojaZmienna ); jakasFunkcja( & twojaZminna[ 0 ] );
Można też zdefiniować rozmiar tablicy 'dynamicznie' przypisując do tego tekst: char twojazmienna[ ] = "Jakiś tekst";
PS. Łatwiej się udziela odpowiedzi, jeżeli podasz też linijkę w której wystąpił błąd. W przeciwnym wypadku możemy napisać Ci tylko interpretację komunikatu błędu. |
|
slyys72 Temat założony przez niniejszego użytkownika |
» 2021-03-03 14:57:53 Błąd jest w linii nr 4 jak pisałem w poście . LPSTR NazwaKlasy = "Klasa Okienko";
Będę cos kombinował sam ale kiepsko to widzę :) . |
|
nanoant20 |
» 2021-03-03 15:41:29 tak jak wyżej pisał @DejaVu zamiast LPSTR użyj następujących typów danych LPTSTR reprezentuje char* lub LPCTSTR reprezentuje const char*
zamiast LPSTR NazwaKlasy = "Klasa Okienko"; piszesz, np. LPCTSTR NazwaKlasy = "Klasa Okienko";
const char lpText[] = TEXT("Okno odmówiło przyjścia na świat!");
MessageBox( NULL, lpText, "Ale kicha...", MB_ICONEXCLAMATION ); |
|
slyys72 Temat założony przez niniejszego użytkownika |
» 2021-03-03 16:46:24 Zastosowanie tych zmian pozbyło sie błędu z LPSTR i char. Mimo wszystko dalej nie moge uruchomic tego okienka. Teraz mam błędy : wiersz nr 1: LNK1120 liczba nierozpoznanych elementów zewnętrznych: 1 wiersz nr 1: LNK2019 nierozpoznany symbol zewnętrzny _main przywołany w funkcji "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) D:\Programy C++\Okienka\okno\MSVCRTD.lib(exe_main.obj) wiersz nr 8: C28251 Niespójna adnotacja dla „WinMain”: w tym wystąpieniu jest brak adnotacji. Patrz d:\windows kits\10\include\10.0.18362.0\um\winbase.h(933). Cały obecny kod: #include <windows.h>
LPCTSTR NazwaKlasy = TEXT( "Klasa Okienko" ); MSG Komunikat;
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE HprevInstance, LPSTR plCmdLine, int nCmdShow ) { WNDCLASSEX wc; wc.cbSize = sizeof( WNDCLASSEX ); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); wc.lpszMenuName = NULL; wc.lpszClassName = NazwaKlasy; wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); if( !RegisterClassEx( & wc ) ) { MessageBox( NULL, TEXT( "Wysoka komisja odmawia rejestracji tego okna!" ), TEXT( "Niestety..." ), MB_ICONEXCLAMATION | MB_OK ); return 1; } HWND hwnd; hwnd = CreateWindowEx( WS_EX_WINDOWEDGE, NazwaKlasy, TEXT( "Interfejs Graficzny" ), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 250, 250, NULL, NULL, hInstance, NULL ); if( hwnd == NULL ) { MessageBox( NULL, TEXT( "Okno odmowilo przyjscia na swiat :(" ), TEXT( "Blad" ), MB_ICONEXCLAMATION ); return 1; } ShowWindow( hwnd, nCmdShow ); UpdateWindow( hwnd ); while( GetMessage( & Komunikat, NULL, 0, 0 ) ) { TranslateMessage( & Komunikat ); DispatchMessage( & Komunikat ); } return Komunikat.wParam; } LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_CLOSE: DestroyWindow( hwnd ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, msg, wParam, lParam ); } return 0; } Dodam tylko że jak tworzę okno automatycznie jako szablon wbudowany w Visual Studio 2019 wszystko działa. Oczywiście tam kod szablonu jest inny . Chciałbym jednak rozwikłać te zagadkę - dlaczego to z kursu się nie uruchamia ??? |
|
nanoant20 |
» 2021-03-03 17:17:51 |
|
slyys72 Temat założony przez niniejszego użytkownika |
» 2021-03-03 18:35:56 To już była moja wina. Źle tworzyłem pusty projekt aplikacji windows.
Temat zamknięty. Sprawa LPSTR rozwiązana.
Dziekuję za pomoc. |
|
« 1 » |