Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
// dxRenderWindow.hpp class __declspec(dllExport) dxRenderWindow { public: dxRenderWindow(void); ~dxRenderWindow(void); /*...unwichtige Member entfernt...*/ private: /*...unwichtige Member entfernt...*/ dxRenderWindowParamter *m_dxWindowParameter; static BOOL m_classRegistered; static WNDCLASSEX m_dxRenderClass; }; // dxRenderWindow.cpp #include "dxRenderwindow.hpp" dxRenderWindow::dxRenderWindow(void) : m_hWnd (NULL), m_dxWindowParameter( NULL ) { if (dxRenderWindow::m_classRegistered != TRUE) { ZeroMemory( &dxRenderWindow::m_dxRenderClass, sizeof(WNDCLASSEX)); dxRenderWindow::m_dxRenderClass.cbSize = sizeof(WNDCLASSEX); dxRenderWindow::m_dxRenderClass.hInstance = GetModuleHandle( NULL ); dxRenderWindow::m_dxRenderClass.lpszClassName = L"dxRenderWindowClass"; dxRenderWindow::m_dxRenderClass.style = CS_HREDRAW | CS_VREDRAW; dxRenderWindow::m_dxRenderClass.lpfnWndProc = (WNDPROC)staticDefWndProc; RegisterClassEx( &dxRenderWindow::m_dxRenderClass ); dxRenderWindow::m_classRegistered = TRUE; } } dxRenderWindow::~dxRenderWindow(void) { if (m_dxWindowParameter != NULL) { delete m_dxWindowParameter; } if (dxRenderWindow::m_classRegistered) { // Hier bleibt der Debugger manchmal hängen // aber selbst wenn ich den ganzen dtor leer habe kommt es zu dem Fehler UnregisterClass( L"dxRenderWindowClass", GetModuleHandle( NULL ) ); } } // main.cpp vom aufrufer Programm int main() { dxRenderWindow *window = new dxRenderWindow(); std::cout << "Test vor delete"; // das wird noch angezeigt delete window; std::cout << "Test nach delete"; // das nichtmehr return 0; } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sortoc« (17.02.2012, 00:18)
C-/C++-Quelltext |
|
1 2 3 |
dxRenderWindow::dxRenderWindow(void) : m_hWnd (NULL), m_dxWindowParameter( NULL ) {...} |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
int main() { dxRenderWindow *window = new dxRenderWindow(); std::cout << "Test vor delete"; // das wird noch angezeigt delete window; std::cout << "Test nach delete"; // das nichtmehr return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 |
int main() { dxRenderWindow window; return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#ifndef dxRenderWindow_h__ #define dxRenderWindow_h__ #include "dxRender.hpp" // Hier wird DLLTOKEN definiert #include "dxWindowStruct.hpp" // Includiert "dxRenderWindowParameter.hpp" class DLLTOKEN dxRenderWindow // DLLTOKEN ist in dem Dll-Projekt __declspec(dllexport) ansonsten __declspec(dllImport) { public: dxRenderWindow(void); ~dxRenderWindow(void); BOOL create( const dxRenderWindowParamter *dxWindowParameter ); private: HWND m_hWnd; dxRenderWindowParamter *m_dxWindowParameter; // Static stuff static LRESULT staticDefWndProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); static BOOL m_classRegistered; static WNDCLASSEX m_dxRenderClass; }; #endif // dxRenderWindow_h__ |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
#include "dxRenderWindow.hpp" // Static Init BOOL dxRenderWindow::m_classRegistered = FALSE; WNDCLASSEX dxRenderWindow::m_dxRenderClass = WNDCLASSEX(); // End Static Init dxRenderWindow::dxRenderWindow(void) : m_hWnd (NULL), m_dxWindowParameter( NULL ) { if (dxRenderWindow::m_classRegistered != TRUE) { ZeroMemory( &dxRenderWindow::m_dxRenderClass, sizeof(WNDCLASSEX)); dxRenderWindow::m_dxRenderClass.cbSize = sizeof(WNDCLASSEX); dxRenderWindow::m_dxRenderClass.hInstance = GetModuleHandle( NULL ); dxRenderWindow::m_dxRenderClass.lpszClassName = L"dxRenderWindowClass"; dxRenderWindow::m_dxRenderClass.style = CS_HREDRAW | CS_VREDRAW; dxRenderWindow::m_dxRenderClass.lpfnWndProc = (WNDPROC)staticDefWndProc; RegisterClassEx( &dxRenderWindow::m_dxRenderClass ); dxRenderWindow::m_classRegistered = TRUE; } } dxRenderWindow::~dxRenderWindow(void) { if (m_dxWindowParameter != NULL) { delete m_dxWindowParameter; } if (dxRenderWindow::m_classRegistered) { UnregisterClass( L"dxRenderWindowClass", GetModuleHandle( NULL ) ); } } BOOL dxRenderWindow::create( const dxRenderWindowParamter *dxWindowParameter ) { m_dxWindowParameter = new dxRenderWindowParamter(); *m_dxWindowParameter = *dxWindowParameter; m_hWnd = CreateWindowEx( WS_CAPTION | WS_BORDER, dxRenderWindow::m_dxRenderClass.lpszClassName, m_dxWindowParameter->lpszCaption, dxRenderWindow::m_dxRenderClass.style, 0, 0, m_dxWindowParameter->iWidth, m_dxWindowParameter->iHeigth, NULL, NULL, dxRenderWindow::m_dxRenderClass.hInstance, NULL); if (m_hWnd != NULL) { SetWindowLong( m_hWnd, GWL_USERDATA, (LONG)this ); std::cout << "created::dxRenderWindow at " << &m_hWnd << " (" << m_hWnd << ")\n"; return TRUE; } else { return FALSE; } } LRESULT dxRenderWindow::staticDefWndProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ) { dxRenderWindow *pRenderWindow = ( dxRenderWindow* ) GetWindowLong( hWnd, GWL_USERDATA ); return pRenderWindow->m_dxWindowParameter->lpfnWndProc( hWnd, Msg, wParam, lParam); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#ifndef dxWindowStruct_h__ #define dxWindowStruct_h__ #include "dxRender.hpp" struct DLLTOKEN dxRenderWindowParamter { int iWidth; int iHeigth; LPCWSTR lpszCaption; WNDPROC lpfnWndProc; }; #endif // dxWindowStruct_h__ |
Werbeanzeige