Kann mir jemand helfen?



  • Hallo,
    ich weiß echt nicht warum das nachfolgende Programm nicht funktioniert.
    Beim Compilen treten Fehler wie: Syntaxfehler: Bezeichner 'LPDIRECTDRAWSURFACE7'. Das seltsame ist aber das der Syntaxfehler nicht in meiner Datei sondern in der ddraw.h vom DirectX SDK auftritt. Die libs hab ich auch eingebunden. Ich verwende visual C++.NET. Hier ist der Code:

    //Datei Frame.h
    #define WIN32_LEAN_AND_MEAN
    #define SPIEL_AUSWAHL  0
    #define SPIEL_START    1
    #define SPIEL_LAUEFT   2
    #define SPIEL_NEUSTART 3
    
    #define SCREEN_BREITE 1024  
    #define SCREEN_HOEHE 768
    #define SCREEN_BPP 8
    
    bool Spiel_Initialisieren(void);
    bool Spiel_Beenden(void);
    bool xxxDDraw_PufferWechseln(void);
    bool xxxDDraw_initialisieren(void);
    bool xxxDDraw_Puffer_leeren(LPDIRECTDRAWSURFACE7 lpDDsurf,UCHAR Farbe);
    bool xxxMale_Pixel(int x, int y, UCHAR Farbe,LPDIRECTDRAWSURFACE7 lpDDsurf);
    bool xxxDDraw_beenden(void);
    // Datei Main.cpp
    #define WIN32_LEAN_AND_MEAN
    #pragma comment(lib,"ddraw.lib")
    #pragma comment(lib,"dxguid.lib")
    
    #include "Frame.h"
    #include <ddraw.h>
    #include <windows.h>
    
    bool done;
    int SPIEL_ZUSTAND;
    HWND hwnd;
    
    LPDIRECTDRAW7        lpDD;
    LPDIRECTDRAWSURFACE7 lpDDSPrimary;
    LPDIRECTDRAWSURFACE7 lpDDSBack; 
    
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
    {
    
        switch(message)
        {
        case WM_KEYDOWN:
                 switch(wparam)
                 {
                 case VK_ESCAPE:
                     {
                         PostMessage(hwnd, WM_CLOSE,0,0);
                         return 0;
                     } break;
                 case VK_F12:
                     {
                         xxxDDraw_PufferWechseln();
                         return 0;
                     } break;
                 }
        case WM_DESTROY:
            {
                done = true;
                PostQuitMessage(0);
                return(0);
            } break;
        default: 
            {   
                return (DefWindowProc(hwnd,message,wparam,lparam));
                break;
            }
        } 
    }
    
    int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprevinst,
                       LPSTR lpcmdline, int ncmdshow)
    {
    
        WNDCLASSEX winclass;
        MSG message;
        const char szclassname[] = "Klassenname";
        DWORD loop_start_time;
    
        winclass.cbSize = sizeof(WNDCLASSEX);
        winclass.style = CS_HREDRAW | CS_VREDRAW;
        winclass.lpfnWndProc = WindowProc;
        winclass.cbClsExtra = 0;
        winclass.cbWndExtra = 0;
        winclass.hInstance = hinst;
        winclass.hIcon = LoadIcon(NULL, IDC_ARROW);
        winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        winclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        winclass.lpszMenuName = NULL;
        winclass.lpszClassName = szclassname;
        winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    
        if (!RegisterClassEx(&winclass))
            return (0);
    
        if (!(hwnd = CreateWindowEx( NULL,
                                     szclassname,
                                     " 3D Spieleprogrammierung - Titelleiste",
                                     WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                                     0,0,
                                     400,300,
                                     NULL,
                                     NULL,
                                     hinst,
                                     NULL)))
    
                                     return(0);
        done = false;
        SPIEL_ZUSTAND = SPIEL_AUSWAHL;
    
        Spiel_Initialisieren();
    
        while(!done)
        {
            while(GetMessage(&message,NULL,0,0))
            {
                TranslateMessage(&message);
                DispatchMessage(&message);
            }
    
            loop_start_time = GetTickCount();
    
            switch(SPIEL_ZUSTAND)
            {
            case SPIEL_AUSWAHL:
                {
                    SPIEL_ZUSTAND = SPIEL_START;
                }
            case SPIEL_START:
                {
                    SPIEL_ZUSTAND = SPIEL_LAUEFT;
                }
            case SPIEL_LAUEFT:
                {
                    // .........
                }
            case SPIEL_NEUSTART:
                {
                    SPIEL_ZUSTAND = SPIEL_START;
                } break;
            default: break;
            }
            while((GetTickCount()-loop_start_time) < 40);
        }
    
        Spiel_Beenden();
    
        return message.wParam;
    }
    
    bool Spiel_Initialisieren(void)
    {
        int ret;
        ret = xxxDDraw_initialisieren();
        if (ret == 0)
            MessageBox(hwnd,"DDraw Fehler","XXX",MB_OK)
        return true;
    }
    
    bool Spiel_Beenden(void)
    {
        xxxDDraw_beenden();
        return true;
    }
    
    bool xxxDDraw_initialisieren(void)
    {
        HRESULT           ddrval;
        HDC               hdc;
        DDSURFACEDESC2    ddsd;
        DDSCAPS2          ddscaps;
    
        ddrval = DirectDrawCreateEx(NULL, (LPVOID *)&lpDD, IID_IDIRECTDRAW7,NULL);
    
        if(ddrval != DD_OK)
        {
            return 0;
            MessageBox(hwnd,"DDraw Fehler: CreateEx()","XXX", MB_OK);
        }
        ddrval = lpDD->SetCooperativeLevel(hwnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
    
        if (ddrval != DD_OK)
        {
            return 0;
            MessageBox(hwnd,"DDraw Fehler: CoopLevel()","XXX",MB_OK);
        }
    
        ZeroMemory(&ddsd,sizeof(ddsd));
        ddsd.dwSize = sizeof(ddsd);
        ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
        ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSDCAPS_FLIP | DDSCAPS_COMPLEX;
        ddsd.dwBackBufferCount = 1;
    
        ddrval = lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL);
        if(ddrval != DD_OK)
        {
            return 0;
            MessageBox(hwnd,"DDraw Fehler: CreateSurf()","XXX",MB_OK);
        }
        ZeroMemory(&ddscaps, sizeof(ddscaps));
        ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
        ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack);
        if (ddrval != DD_OK) {
            MessageBox(hwnd,"DDraw Fehler: Attached Surface()","xxx",MB_OK);
            return false;
        }
    
        xxxDDraw_Puffer_leeren(lpDDSPrimary,255);
        xxxDDraw_Puffer_leeren(lpDDSPrimary,255);
    
        if (lpDDSPrimary->GetDC(&hdc) == DD_OK)
        {
            SetBkColor(hdc,RGB(255,0,0));
            SetTextColor(hdc,RGB(255,255,0));
            TextOut(hdc,380,300,"FRONT",lstrlen("FRONT"));
            lpDDSPrimary->ReleaseDC(hdc);
        }
    
        if (lpDDSBack->GetDC(&hdc) == DD_OK)
        {
            SetBkColor(hdc,RGB(255,0,0));
            SetTextColor(hdc,RGB(255,255,0));
            TextOut(hdc,380,300,"Back",lstrlen("Back"));
            lpDDSBack->ReleaseDC(hdc);
        }
        return true;
    }
     bool xxxDDraw_PufferWechseln(void)
    { 
        HRESULT ddrval;
    
        for(int i = 0;i<100; i++)
        {
            xxxMale_Pixel(rand()%800,rand()%600,rand()%256,lpDDSBack);
        }
    
        ddrval = lpDDSPrimary->Flip(NULL,DDFLIP_WAIT);
        if (ddrval == DD_OK)
            return true;
        else if (ddrval == DDERR_SURFACELOST)
        {
            ddrval = lpDDSPrimary->Flip(NULL,DDFLIP_WAIT);
            if (ddrval != DD_OK)
                return false;
           return true;
        }
      return true;
    }
    
    bool xxxDDraw_Puffer_leeren(LPDIRECTDRAWSURFACE7 LpDDSurf, UCHAR Farbe)
    {
        HRESULT ddrval;
        DDBLTFX ddbltfx;
    
        ZeroMemory(&ddbltfx,sizeof(ddbltfx));
        ddbltfx.dwSize = sizeof(DDBLTFX);
        ddbltfx.dwFillColor = Farbe;
    
        ddrval = LpDDSurf->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&ddbltfx);
        if ( ddrval != DD_OK)
        {
            MessageBox(hwnd,"DDraw Fehler: Puffer_leeren()","XXX",MB_OK);
            return false;
        }
        return true;
    }
    
    bool xxxMale_Pixel(int x, int y, UCHAR Farbe, LPDIRECTDRAWSURFACE7 lpDDSurf)
    {
        int Zeilenbreite;
        UCHAR *vram;
        DDSURFACEDESC2 ddsd;
    
        ZeroMemory(&ddsd,sizeof(ddsd))
        ddsd.dwSize = sizeof(ddsd);
        lpDDSurf->Lock(NULL,&ddsd,DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL)
        Zeilenbreite = ddsd.lPitch;
        vram = (UCHAR *)ddsd.lpSurface;
        vram[x + y+Zeilenbreite] = Farbe;
        lpDDSurf->Unlock(NULL);
        return true;
    }
    
    bool xxxDDraw_beenden(void)
    {
        if(lpDD != NULL)
        {
            if(lpDDSPrimary != NULL)
            {
                lpDDSPrimary->Release();
                lpDDSPrimary = NULL;
                lpDDSBack = NULL;
            }
        lpDD->Release();
        lpDD = NULL;
        }
    return true;
    }
    

    Grüße Julian



  • Hi !

    Poste mal den Compileroutput.
    Weiterhin würde ich dir raten das #include <ddraw.h> etwas mehr nach oben zu verschieben 🙄



  • Hi,
    ich habs jetzt gemacht und es geht.
    Danke für deine Hilfe. Ich wär schon fast verzweifelt
    mfg jube


Anmelden zum Antworten