Debugger Einzelschritte F11 springt nicht in funktion
-
hola leute
folgendes problem:
scheinbar wird ein funktionsaufruf im code nicht ausgeführt und der debugger überspringt die funktion genauso.das ist die funktion wo es passiert:
auto __stdcall InitWindowProc(HWND hwnd, unsigned int msg, uint_ptr wparam, long_ptr lparam) noexcept -> long_ptr { if(msg == WM_NCCREATE || msg == WM_CREATE) { txl::gui::message m(hwnd, msg, wparam, lparam); interface_window_callback *wc = reinterpret_cast<interface_window_callback*>(reinterpret_cast<CREATESTRUCT*>(lparam)->lpCreateParams); if(wc != nullptr) { SetPropW(hwnd, window_property_name(), reinterpret_cast<HANDLE>(wc)); SetWindowLongPtr(hwnd, GWLP_WNDPROC, reinterpret_cast<long_ptr>(&WindowProc)); wc->window_procedure(m); // das ist der funktionsaufruf der uebersprungen wird if(m.processed == true) { return m.result; } } } return DefWindowProcW(hwnd, msg, wparam, lparam); }
der pointer 'wc' zeigt auf einen gueltigen speicherbereich. auf ein object das ich erstellt hatte. hab ich ueberprueft.
ich hab auch in window_procedure einen breakpoint gesetzt. ohne erfolg.hier der code zu window_procedure:
// header file: class __declspec(novtable) interface_window_callback { public: virtual auto window_procedure(txl::gui::message &m) noexcept -> void = 0; }; class window_callback : public txl::object, public interface_window_callback { public: friend auto __stdcall InitWindowProc(HWND hwnd, unsigned int msg, uint_ptr wparam, long_ptr lparam) noexcept -> long_ptr; friend auto __stdcall WindowProc(HWND hwnd, unsigned int msg, uint_ptr wparam, long_ptr lparam) noexcept -> long_ptr; ... protected: virtual auto window_proc(txl::gui::message &m) noexcept -> void; private: virtual auto window_procedure(txl::gui::message &m) noexcept -> void override; ... }; // cpp-file auto window_callback::window_proc(txl::gui::message & m) noexcept -> void { window_message_event_data *data = events.find(m.msg); if(data != nullptr) { (reinterpret_cast<window_message_event_data::generic_class*>(m_owner)->*(data->function))(m); } } auto window_callback::window_procedure(txl::gui::message & m) noexcept -> void { window_proc(m); if (m.processed == false) { m.result = DefWindowProcW(m.handle, m.msg, m.wparam, m.lparam); m.processed = true; } }
woran koennte das liegen ?
Visual Studio 2015 Community, Windows 10
PS: die variable processed in m ist auch noch auf false gesetzt obwohl sie in window_procedure auf true gesetzt wird.
Meep Meep
-
Schau dir das Disassembly an, da kannst sicher überall reinspringen.
-
ich hab jetzt der klasse interface_window_callback eine weitere function spendiert:
virtual auto test(void) noexcept -> void = 0;
in window_callback sieht sie dann so aus:
virtual auto test(void) noexcept -> void { if(m_handle.native_handle() == 0) MessageBoxW(0, L"handle == 0", L"Message", MB_OK); }
die ruf ich vor window_procedure in der InitWindowProc auf. selber effekt. geht nicht rein und MessageBoxW wird nicht ausgefuehrt