Ergebnis 1 bis 5 von 5
  1. #1
    Trojaner Avatar von motion
    Registriert seit
    12.09.2010
    Beiträge
    81

    Standard Problem bei Winapi Wrapper

    Hallo, ich schreibe im Moment an einem Winapi Wrapper (blablabla, gibt es schon; blablabla, warum das Rad neu erfinden - ich weiß. Zum Verständnis ) und habe dabei Probleme. Um ehrlich zu sein, ich habe bis jetzt nur den Source eines bestehenden Wrappers genommen, versucht zu verstehen - das auch geschafft - und jetzt versuche ich erstmal alles in einer Headerdatei unterzubringen. Funktioniert soweit gut, das Kompilieren geht, doch bei der Ausführung hakt es.

    Ich übergebe bei der Erstellung des Fensters einen zeiger auf die Erstellende Klasse (this) mit um später in der Fensterprozedur die Empfängerklasse der Nachricht determinieren zu können. Die Prozedur und alles andere steht soweit (ein Link zur Headerdatei unten) doch CreateWindowEx schlägt fehl, ohne jegliche Angabe zum Grund. Selbst wenn ich GetLastError aufrufe gibt dies 0 zurück. Hier mal die Create Funktion der Klasse:

    Code:
    bool Create(LPCTSTR lpClassName, HINSTANCE hInstance, LPCTSTR lpWindowName, DWORD dwStyle, DWORD dwStyleEx = 0,
    HWND hWndParent = 0, HMENU hMenu = 0, int x = CW_USEDEFAULT, int y = CW_USEDEFAULT,
    int nWidth = CW_USEDEFAULT, int nHeight = CW_USEDEFAULT) {
    if(hWnd) return false;
    							
    PASSLPARAM *p = new PASSLPARAM;
    p->phwnd = &hWnd;
    p->pwindow = this;
    					
    hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, reinterpret_cast<LPVOID>(p));
    										
    GetLastError();
    
    return (hWnd != NULL);
    }
    Ich habe schon einiges verändert um herauszufinden, woran der "Fehler" liegt, ich habe auch schon versucht anstatt der PASSLPARAM Struktur
    Code:
    	struct PASSLPARAM {
    wwindow *pwindow;
    HWND *phwnd;
    };
    nur den this Zeiger zu übergeben. Vergeblich.
    Wenn ich als lParam NULL übergebe, funktioniert das Erstellen des Fensters, doch die Fensterprozedur nicht mehr.

    Hier der link:#1203150 - Pastie

    Vielleicht kann ja jemand von euch mir sagen, wo mein Fehler liegt und ob/wie ich ihn beheben kann. Danke schonmal im Vorhinein.

    /motion
    Geändert von motion (06.10.2010 um 16:04 Uhr) Grund: whitespaces entfernt

  2. #2
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Hi,
    ich befürchte du wirst dich erschlagen wollen, nachdem du den Patch gesehen haben wirst, also atme lieber nochmal tief durch.

    Der Patch:


    Hier mein Code mit dem es funktioniert:
    Geändert von blackberry (06.10.2010 um 17:50 Uhr)

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  3. #3
    Trojaner Avatar von motion
    Registriert seit
    12.09.2010
    Beiträge
    81

    Standard

    Danke, dass du erstmal auf den Beitrag geantwortet hast, ich hatte schon befürchtet, keine Antwort zu bekommen, weil es doch speziell ist. Vielleicht bin ich grade am hängen oder sonstwas, ich verstehe jedoch nicht genau was jetzt mein Problem war ^^ Ich würde jedoch jetzt gerne wissen, wie du darauf gekommen bist, dass das das Problem war...

  4. #4
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Habs gerade nochmal getestet... das mit dem ShowWindow ist auch unnötig, wenn man WS_VISIBLE als Style übergibt.
    Was das mit dem DefWindowProc angeht, so ist es wichtig, dass alle Nachrichten bearbeitet werden. Welche Nachricht(en) jetzt genau dafür gesorgt hat/haben weiß ich nicht, jedoch sollte man DefWindowProc immer aufrufen, wenn man nachrichten nicht selber behandelt, damit man sicherstellen kann, dass auch diese behandelt werden.

    In deinem Code steht ja auch in Zeile 148:
    break; // DefWindowProc is called
    Hätte ja im Grunde ein Hinweis sein können, dass am Ende der Funktion irgendwie DefWindowProc aufgerufen werden müsste; dies war jedoch nicht der Fall.

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  5. #5
    Trojaner Avatar von motion
    Registriert seit
    12.09.2010
    Beiträge
    81

    Standard

    Krasse Geschichte. Mir muss wohl der Aufruf von DefWindowProc unter die Räder gekommen sein... Danke auf jeden Fall herzlich für deine Hilfe. Ich finde es gut, dass hier so schnell eine Antwort kam. Auch wenn ich noch sagen muss, dass ich den Fehler schon irgendwie "lächerlich" finde. Ich wäre allerdings nie darauf gekommen also danke nochmal vielmals.

    /motion

Ähnliche Themen

  1. [C]WinAPI und Netzwerkprogrammierung
    Von QpL im Forum C, C++
    Antworten: 3
    Letzter Beitrag: 06.09.2010, 20:52
  2. [C++]WinApi
    Von matze093 im Forum C, C++
    Antworten: 5
    Letzter Beitrag: 26.06.2010, 16:03
  3. WinAPI
    Von Muffel im Forum Java
    Antworten: 7
    Letzter Beitrag: 06.05.2009, 18:58
  4. PHP Tor Wrapper
    Von -=Player=- im Forum PHP
    Antworten: 7
    Letzter Beitrag: 02.11.2008, 21:56
  5. [eBook] C++ Winapi
    Von DeXTer im Forum C, C++
    Antworten: 3
    Letzter Beitrag: 06.12.2007, 20:49

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •