wieder einmal wrappen...("read" fehler ohne kompiliermeldungen)
-
Hallo leute!
ich hab mal angefangen die funktionen zur erstellung eines winapi fensters zu kapseln. ich weiß hier aber hint und vorn nicht, was ich dafür wohin packen muss

ich hab einfach mal angefangen. (die FAQ und Suche hab ich schon durchsucht, half mir aber net) hier mein code:
(winapi.cpp, habe den code zum testen nur in eine datei gemacht.)#include <windows.h> LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam); class Window { private: HWND hWnd; PAINTSTRUCT ps; HDC hdc; MSG msg; public: LPCSTR szAppName; Window(); ~Window(); void Initialize(HINSTANCE hInstance,int iCmdShow); int Loop(); }; Window::Window() { szAppName="Winapitest"; } Window::~Window() { } void Window::Initialize(HINSTANCE hInstance,int iCmdShow) { Window *win; 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=0; wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName=szAppName; wc.lpszMenuName=0; RegisterClass(&wc); // Fensterklasse Registrieren hWnd=CreateWindow(szAppName, // Fenstername "Wrapper", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, /* X-Position auf dem Monitor */ CW_USEDEFAULT, /* Y-Position auf dem Monitor */ 800, /* Fensterbreite */ 550, /* Fensterhoehe */ NULL, NULL, hInstance, NULL); ShowWindow(hWnd,iCmdShow); UpdateWindow(hWnd); win->Loop(); } int Window::Loop() { while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg) { case WM_CREATE: MessageBox(hWnd,"test","test",MB_OK+MB_ICONINFORMATION); break; case WM_CLOSE: break; case WM_PAINT: break; } return DefWindowProc(hWnd,msg,wParam,lParam); }test.cpp:
#include <windows.h> #include "winapi.cpp" int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow) { Window *win; win->Initialize(hInstance,iCmdShow); return win->Loop(); }kompilier aufruf: g++ -s test.cpp -mwindows -o test.exe
..
kompiler bringt keine fehler und bei programmstart gibts einen fehler in anweisung "read" (addresen: 0x00401368 verweist auf 0x00000063)hoffe ihr könnt mir helfen

-
Blackhawk schrieb:
Window *win;
win->Initialize(hInstance,iCmdShow);Vielleicht solltest du einen Gang zurückschalten, und dich mit den Grundlagen von C bzw. C++ befassen, zumindest bis du diese Frage beantworten kannst:
Worauf zeigt win?
P.S.: Klassen hast du auch noch nicht richtig verstanden. Weißt du, was this ist?
-
ganz schlecht gekapselt
-
MFK schrieb:
Worauf zeigt win?
Auf: 0x00000063

kennst du new, aber dazu auch delete?
Ich glaub ich werd in Kürze mal ein Mini-Tutorial mit Beispiel schreiben für sowas.
-
Mit new und delete würde es vielleicht laufen, aber es gibt trotzdem keinen Sinn dieses Objekt auf dem Heap anzulegen.
-
MFK schrieb:
Blackhawk schrieb:
Window *win;
win->Initialize(hInstance,iCmdShow);P.S.: Klassen hast du auch noch nicht richtig verstanden. Weißt du, was this ist?
nein, ich weiß nich was this ist.....
omg ich bin doch nicht blöd
und die grundlagen kann ich auch
@MichaM.: ja, kenn ich, aber wie soll ich denn deleten wenn ich damit returne (scheiß frage aber find die antwort einfach nicht)
und flame brauch ich auch nicht. kannst mir erstmal deinen code zeigen...
@sinnlos: der sinn ist, dass ich nicht jedesmal den winapi kack schreiben muss...
-
Du hast *nichts* verstanden.
-
alles klar :p
dann weiß ich ja bescheid

flamer
-
Blackhawk schrieb:
nein, ich weiß nich was this ist.....
...
und die grundlagen kann ich auchDas widerspricht sich. Aber wenn du die Grundlagen verstanden hast, kannst du die Frage ja beantworten: Wohin zeigt dein Zeiger win?
-
ich bin kein flamer. aber du bist ein progger.

-
naja win zeigt auf Window ^^
und außerdem war ich wirklich dumm.. warum ein zeiger wenn auch Window win geht..
geht jetzt übrigens.
nochmal danke an alle flamer ;P und an MFK und MichaM.
-
Blackhawk schrieb:
naja win zeigt auf Window ^^
Du hast keine Ahnung. Das ist kein "Flame", sondern schlicht und einfach die Wahrheit. Ich rate dir, dich mit Grundlagen zu befassen.
und außerdem war ich wirklich dumm.. warum ein zeiger wenn auch Window win geht..
geht jetzt übrigens.Nicht, dass du erklären könntest, wieso es jetzt geht, und wieso es vorher nicht ging.
nochmal danke an alle flamer ;P und an MFK und MichaM.
Gern geschehen. Weitere Hilfe hast du von mir jedenfalls nicht zu erwarten. Dafür ist mir meine Zeit zu schade.
-
win zeigt in die pampa.. sozusagen
ich werd mich mal intensiver mit den grundlagen befassen...
also denke ich, dass es nicht ging, weil win ja in die pampa gezeigt hat und deshalb die funktionen nicht gefunden wurden. ich hätte mit new erstellen sollen.
ist das jetz richtig so??@flamer: tschuldigung, bist kein flamer

-
jetzt bleibt nur noch die frage warum du dein win objekt auf den heap legst?
auf dem stack wäre es besser aufgehoben.
-
ich bin doch aufm Stack (Window win)??
-
Blackhawk schrieb:
ich bin doch aufm Stack (Window win)??
so ja. aber in deinem obrigen bsp wolltest du einen pointer verwenden (der noch nicht allokiert worden war) und wenn du ihn erstellt hättest wäre das auf dem heap gewesen. deswegen die frage
-
Ich würde zu gern den jetzigen Code sehen, du auch miller_m?
-
MichaM. schrieb:
Ich würde zu gern den jetzigen Code sehen, du auch miller_m?
jep.
wann reg'st du dich? bzw. warum nicht?
-
miller_m schrieb:
wann reg'st du dich? bzw. warum nicht?
Ich bin auch reg. (MiC++ha), aber ich habe Hausverbot

Quatsch, ich arbeite gerade an ein bestimmtes Projekt wo es um Cookies, Sessions, Sicherheit etc. geht. Ich müßte mich praktisch für jedes Posting einloggen, das wäre lästig.
-
MichaM. schrieb:
ich arbeite gerade an ein bestimmtes Projekt wo es um Cookies, Sessions, Sicherheit etc. geht. Ich müßte mich praktisch für jedes Posting einloggen, das wäre lästig.
stimmt wär mir auch zuwider.
-
am normalen code vom wrapper hat sich nichts geändert, nur beim aufruf. eben mit dem heap->stack. aber bitte..

#include <windows.h> #include "wrapper.h" int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow) { Window win; win.szAppTitle="Ein Test :P"; win.Initialize(hInstance,iCmdShow); return win.Loop(); }wenn man das so wie es ist mit -mwindows und wrapper.cpp mitlinkt dann gehts.
(ich hab jetzt die klasse & deklaration getrennt, wie sichs gehört^^)
wolltet ihr den wrapper haben?hier mal die .h
#include <windows.h> class Window { private: HWND hWnd; PAINTSTRUCT ps; HDC hdc; MSG msg; public: LPCSTR szAppName; LPCSTR szAppTitle; Window(); ~Window(); void Initialize(HINSTANCE hInstance,int iCmdShow); int Loop(); };