# Problem bei #include <windows.h>



## FroxX (18. August 2005)

Hidiho, ich nochmal 

Folgendes Problem:

Ich hab mit Dev-C++ (und auch mit Visual C++ getestet) ein Programm angefangen, also so ein Windows-Rahmenprogramm. Ich hab nun folgende Dateien:

GameShell.h
GameShell.cpp
GameRoutines.h
GameRoutines.cpp

Ich brauche den Windows-Header in beiden .cpp Files. Wie stell ich das an, bei mir gibts immer nen Fehler, weil man ja einen Header nicht mehrmals einbinden darf. Ich hab schon mit #ifndef, usw. rumprobiert, aber klappt auch nicht.

Für Hilfe wär ich sehr dankbar 

Gruß FroxX


----------



## Flegmon (18. August 2005)

FroxX hat gesagt.:
			
		

> weil man ja einen Header nicht mehrmals einbinden darf



wie kommst du den auf das? die Header Dateien sind bereits mit ifndef ... gesichert!
Die kannst du 100 mal einbinden und es macht keine Probleme


----------



## FroxX (18. August 2005)

Tja, bei mir machts aber Probleme...    

FroxX


----------



## Tobias K. (18. August 2005)

moin


Zeig doch mal eben ei9ne .h und eine .cpp, aber benutz bitte die Code-Tags!


mfg
umbrasaxum


----------



## FroxX (18. August 2005)

GameShell.h:


```
#ifndef GAMESHELL_H
#define GAMESHELL_H

#define WIN32_LEAN_AND_MEAN

#include <windows.h>

//--------------------------------------------------------
//  MACROS
//--------------------------------------------------------

#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code)&0x8000)?1:0)
#define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code)&0x8000)?0:1)

extern int screenwidth;
extern int screenheight;
extern int Farbtiefe;

//--------------------------------------------------------
// Wichtige Game-Funktions Prototypen
//--------------------------------------------------------

void Game_Shutdown();
void Game_Init();
void Game_Main();

extern void GameInitialisierungsRoutine();
extern void GameMainRoutine();
extern void GameCleanUpRoutine();
extern void InitResolution();

#endif
```


GameShell.cpp:


```
//-------------------------------------------------------
//  DEFINES
//-------------------------------------------------------

#define WINDOW_CLASS_NAME "Game Shell Window"

//--------------------------------------------------------
//  INCLUDES
//--------------------------------------------------------

#include "GameShell.h"

//--------------------------------------------------------
//  GLOBALS
//--------------------------------------------------------

HWND      main_window_handle = NULL;
HINSTANCE hinstance_app      = NULL;

//--------------------------------------------------------
// Funktionsdefinitionen
//--------------------------------------------------------

LRESULT CALLBACK WindowProc(HWND hwnd,
                            UINT msg,
                            WPARAM wparam,
                            LPARAM lparam)
{
    PAINTSTRUCT ps;
    HDC         hdc;
     
    // Nachrichtenverarbeitung
    switch(msg)
    {
        case WM_CREATE:
        {
             return(0);
        }
        break;
        
        case WM_PAINT:
        {
             hdc = BeginPaint(hwnd, &ps);
             EndPaint(hwnd, &ps);
             return(0);
        }
        break;
        
        case WM_DESTROY:
        {
             PostQuitMessage(0);
             return(0);
        }
        break;
        
        default:
        break;
    }
    return(DefWindowProc(hwnd, msg, wparam, lparam));
}

///////////////////////////////////////////////////////////////////

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow)
{
    WNDCLASSEX winclass;
    HWND       hwnd;
    MSG        msg;
    
    // Fenstereigenschaften festlegen
    winclass.cbSize         = sizeof(WNDCLASSEX);
    winclass.style          = CS_HREDRAW | CS_VREDRAW;
    winclass.lpfnWndProc    = WindowProc;
    winclass.cbClsExtra     = 0;
    winclass.cbWndExtra     = 0;
    winclass.hInstance      = hinstance;
    winclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
    winclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
    winclass.hbrBackground  = (HBRUSH)GetStockObject(BLACK_BRUSH);
    winclass.lpszMenuName   = NULL;
    winclass.lpszClassName  = WINDOW_CLASS_NAME;
    winclass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
    
    hinstance_app = hinstance;
    
    if(!RegisterClassEx(&winclass))
        return(0);
    
    InitResolution();    
        
    if(!(hwnd = CreateWindowEx(NULL, 
                              WINDOW_CLASS_NAME, 
                              "My Game Shell", 
                              WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                              0, 0,
                              screenwidth, screenheight,
                              NULL,
                              NULL,
                              hinstance,
                              NULL)))
    return(0);
    
    main_window_handle = hwnd;
    
    Game_Init();
    
    while(TRUE) // Nachrichtenweiterleitung
    {
        if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            if(msg.message==WM_QUIT)
            break;
            
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        
        Game_Main();
        
    }
    
    Game_Shutdown();
    
}
    
////////////////////////////////////////////////////////////////////

void Game_Init()
{
     GameInitialisierungsRoutine();
}

////////////////////////////////////////////////////////////////////

void Game_Main()
{
     // Mit ESC kann die Anwendung verlassen werden
     if(KEYDOWN(VK_ESCAPE))
         SendMessage(main_window_handle, WM_CLOSE, 0, 0);
         
     GameMainRoutine();
}

/////////////////////////////////////////////////////////////////////

void Game_Shutdown()
{
     GameCleanUpRoutine();
}
```

Fehlermeldungen (unter anderem):

- FILE undeclared
- fopen undeclared
- fscanf undeclared

Kann es sein, dass die gar nicht in der windows.h drin sind?


----------



## Tobias K. (18. August 2005)

moin




> - FILE undeclared
> - fopen undeclared
> - fscanf undeclared
> 
> Kann es sein, dass die gar nicht in der windows.h drin sind?


Ja das ist sogar so. Binde mal die stdio.h mit ein.


mfg
umbrasaxum


----------



## FroxX (18. August 2005)

Oh, ok, das war's!   

Jetzt krieg ich nur noch andere Fehlermeldungen, aber da weiss ich worans liegt.

Vielen Dank Tobias   

Gruß FroxX


----------

