Fehler in C++

    • Fehler in C++

      Moinsens an alle:
      Ich habe seit langen wieder mein C++ lehrbuch ("Spieleprogrammieren mit C++ und Genesis3d für Kids") ausgegraben und ein paar scripts von der CD getestet, so, soweit so gut, aber wenn ich den script zum öffnen eines neuen fensters:
      (skelett.cpp)

      C-Quellcode

      1. //-------------------------------------------------
      2. // Skelett.cpp :
      3. // Minimalapplikation mit einfachem Fenster
      4. //-------------------------------------------------
      5. #include "Skelett.h"
      6. // Vorwärtsdeklaration:
      7. // Routine für Fenster-Ereignisse
      8. LRESULT CALLBACK WndProc (HWND hWnd,
      9. UINT iMessage, WPARAM wParam, LPARAM lParam);
      10. // Hauptfunktion für Windows-Applikationen
      11. int WINAPI WinMain
      12. (HINSTANCE hInstance, HINSTANCE hPrevInstance,
      13. LPSTR lpCmdLine, int nShowCmd)
      14. {
      15. // Fensterklasse initialisieren
      16. WNDCLASS Win; // Objekt der Fensterklasse
      17. MSG msg; // Aktuelle Meldung
      18. // Extrabytes für Klassen/Fensterinstanz
      19. Win.cbClsExtra = 0;
      20. Win.cbWndExtra = 0;
      21. // Instanz der Fensterklasse
      22. Win.hInstance = hInstance;
      23. // Symbol und Cursor der Fensterklasse
      24. Win.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
      25. Win.hCursor = LoadCursor(NULL, IDC_ARROW);
      26. // Hintergrundfarbe (schwarz) und Fensterstil
      27. Win.hbrBackground =
      28. (HBRUSH)GetStockObject(BLACK_BRUSH);
      29. Win.style = CS_HREDRAW | CS_VREDRAW;
      30. // Verknüpfung mit Ereignis-Routine
      31. Win.lpfnWndProc = WndProc;
      32. // Name der Fensterklasse
      33. Win.lpszClassName = "???";
      34. Win.lpszMenuName = NULL; // kein Menü
      35. // Registrierung der Fensterklasse
      36. RegisterClass (&Win);
      37. // Fenster erzeugen
      38. GHandle = CreateWindow (Win.lpszClassName,
      39. "Windows Minimum - [Esc]=Ende", WS_TILED,
      40. CW_USEDEFAULT, CW_USEDEFAULT, MaxWidth,
      41. MaxHeight, NULL, NULL, hInstance, NULL);
      42. if (!GHandle)
      43. {
      44. return 0; // nicht ok
      45. }
      46. // Fenster zeigen und "auffrischen"
      47. ShowWindow (GHandle, nShowCmd);
      48. UpdateWindow (GHandle);
      49. // "Hauptschleife"
      50. isRunning = true;
      51. while (isRunning)
      52. {
      53. // Fenstereignisse abfragen
      54. while
      55. (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE))
      56. {
      57. if (!GetMessage(&msg, NULL, 0, 0 ))
      58. {
      59. isRunning = false;
      60. break;
      61. }
      62. // Ereignisdaten "übersetzen", weiterschicken
      63. TranslateMessage (&msg);
      64. DispatchMessage (&msg);
      65. }
      66. }
      67. // Programmende
      68. return 1; // ok
      69. }
      70. // Verarbeitung der Meldungen des Hauptfensters
      71. LRESULT CALLBACK WndProc (HWND hWnd,
      72. UINT iMessage, WPARAM wParam, LPARAM lParam)
      73. {
      74. // Ereignis auswerten
      75. switch (iMessage)
      76. {
      77. case WM_KEYDOWN:
      78. {
      79. switch (wParam)
      80. {
      81. case VK_ESCAPE: // Ende mit [Esc]-Taste
      82. {
      83. PostMessage(hWnd, WM_QUIT, 0, 0);
      84. }
      85. }
      86. }
      87. // ansonsten Ereignis an "Default-Handler"
      88. default:
      89. return DefWindowProc
      90. (hWnd, iMessage, wParam, lParam);
      91. }
      92. return 0;
      93. }
      Alles anzeigen

      (skelett.h)

      C-Quellcode

      1. //-------------------------------------------------
      2. // Skelett.h : Minimal-Header
      3. //-------------------------------------------------
      4. #include <windows.h>
      5. // Konstanten
      6. const int MaxWidth = 640; // Max. Screenbreite
      7. const int MaxHeight = 480; // Max. Screenhöhe
      8. // Globalvariablen
      9. HWND GHandle; // Fenster-Handle
      10. bool isRunning; // Laufvariable
      Alles anzeigen


      Kompiliere, dann gibt der folgenden Fehler aus:
      [linker error] undefined reference to `GetStackObject@4'

      so frage, wo ist da jetzt das Problem? Ist doch soweit alles O.K, kene Fehler, und auch kene unlogiken...
    • Die nicht gefundene Funktion müsste eigentlich GetStockObject heißen, oder?
      Dein Fehler bedeutet jedenfalls, dass du eine Library nicht zu deinem Programm dazugelinkt hast. GetStockObject ist so weit ich mich richtig erinnern kann in der gdi32-Library enthalten, ergo musst du wenn du z.B. MinGW verwendest -lgdi32 deiner Makefile, bzw. deiner Library-Liste hinzufügen.