funzt nich



  • Hi!
    Mein Problem ist folgendes:
    Ich hab ein Projekt und in dem waren zuerst zwei Dateien(XXXMain.cpp & XXXMain.h). Wenn ich dann das Projekt compilt hab ging es einwanfrei aber jetzt
    hab ich noch zwei weitere Dateien(XXX2dGrafik.cpp & XXX2dGrafik.h)Wenn ich jetzt das Programm compile dann komm folgender Fehler:
    ------ Erstellen gestartet: Projekt: IsoDD, Konfiguration: Debug Win32 ------

    Verknüpfen...
    XXXMain.obj : error LNK2019: Nicht aufgeloestes externes Symbol "bool __cdecl xxxMale_Pixel(int,int,unsigned char,struct IDirectDrawSurface7 *)" (?xxxMale_Pixel@@YA_NHHEPAUIDirectDrawSurface7@@@Z), verwiesen in Funktion "bool __cdecl xxxDDraw_PufferWechseln(void)" (?xxxDDraw_PufferWechseln@@YA_NXZ)
    Debug/IsoDD.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise

    Das Build-Protokoll wurde unter "file://c:\Dokumente und Einstellungen\juli\Eigene Dateien\Visual c++ Projekte\IsoDD\Debug\BuildLog.htm" gespeichert.
    IsoDD - 2 Fehler, 0 Warnung(en)

    ---------------------- Fertig ----------------------

    Erstellen: 0 erfolgreich, 1 fehlgeschlagen, 0 übersprungen

    Ich verwende DirectX und habe die libs eingebunden.
    Kann mir jemand helfen?
    jube 😕



  • Hi !

    Solltest du deine Dateien vielleicht noch zu dem Projekt hinzufügen ?



  • Hi,
    hab ich ja gemacht. Geht aber trozdem nicht. Hat das denn irgendwas mit dem Fehler zu tun?
    mfg jube



  • Ja, dann kommt genau der Fehler ...

    Poste mal den Inhalt der Datei. Vielleicht hast du vergessen eine Funktion auszuschreiben (d.h. du hast sie nur deklariert)



  • Original erstellt von jube:
    xxxMale_Pixel

    *lol*
    Sorry, aber wie bist Du bitte auf diesen Funktionsnamen gekommen; gibts irgendwo auch xxxFemale_Pixel? 😉
    Und: Gibt es dann auch xxxRenderScene() und renderXXXscene() und Konsorten? :p



  • im buch von stefan zerbst sind diese präfixe verewigt 😃 😃 😃



  • Hi,

    Generation XXX sach ich nur. Und was ich erst an den Filmrechten von Triple X verdient hab... unschlagbar 😃

    Ciao,
    Stefan



  • Wenn ich dann mal an die ganzen Pornos denke. Will gar net wissen wo du das Geld bunkerst.



  • Hi!
    Hier ist der Code. (Is aber viel 😃 )

    // XXXMain.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);
    
    //XXX2dGrafik.h
    bool xxxmale_Pixel(int x,int y,UCHAR Farbe,LPDIRECTDRAWSURFACE7 lpDDSurf);
    bool xxxMale_Pixel(int x, int y, UCHAR Farbe,LPDIRECTDRAWSURFACE7 lpDDsurf);
    bool xxxmale_Rechteck(int xLinks,int yOben,int xRechts, int yUnten,UCHAR Farbe
                           ,LPDIRECTDRAWSURFACE7 lpDDSurf, bool solide);
    
    int SPIEL_ZUSTAND;
    HWND hwnd;
    
    LPDIRECTDRAW7        lpDD;
    LPDIRECTDRAWSURFACE7 lpDDSPrimary;
    LPDIRECTDRAWSURFACE7 lpDDSBack; 
    
    // XXXMain.cpp
    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 | DDSCAPS_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);
        }
    
        for (int g=0;g<10;g++)
        {
            bool rect;
            if (rand()%2 == 1) rect = true;
            else rect = false;
            xxxmale_Rechteck(rand()%800,rand()%600,rand()%800,rand()%600,rand()%256,lpDDSBack,rect);
        }
    
        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 xxxDDraw_beenden(void)
    {
        if(lpDD != NULL)
        {
            if(lpDDSPrimary != NULL)
            {
                lpDDSPrimary->Release();
                lpDDSPrimary = NULL;
                lpDDSBack = NULL;
            }
        lpDD->Release();
        lpDD = NULL;
        }
    return true;
    }
    
    // XXX2dGrafik.cpp
    #pragma comment(lib,"ddraw.lib")
    #pragma comment(lib,"dxguid.lib")
    
    #include <ddraw.h>
    #include "XXX2dGrafik.h"
    #include "XXXMain.h"
    
    extern LPDIRECTDRAW7        lpDD;
    extern LPDIRECTDRAWSURFACE7 lpDDSPrimary;
    extern LPDIRECTDRAWSURFACE7 lpDDSBack; 
    
    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 xxxmale_Rechteck(int xLinks,int yOben,int xRechts, int yUnten,UCHAR Farbe
                           ,LPDIRECTDRAWSURFACE7 lpDDSurf, bool solide)
    {
        int            Zeilenbreite;
        int            DDS_BREITE;
        int            DDS_HOEHE;
        UCHAR         *vram;
        DDSURFACEDESC2 ddsd;
    
        ZeroMemory(&ddsd,sizeof(ddsd));
        ddsd.dwSize = sizeof(ddsd);
    
        lpDDSurf->Lock(NULL,&ddsd, DDLOCK_SURFACEMEMORYPTR |  DDLOCK_WAIT,NULL);
    
        Zeilenbreite = ddsd.lPitch;
        DDS_BREITE = ddsd.dwWidth;
        DDS_HOEHE = ddsd.dwHeight;
        vram = (UCHAR*)ddsd.lpSurface;
    
        if (xLinks < 0) xLinks= 0;
        if (xRechts < DDS_BREITE) xRechts = DDS_BREITE;
        if (yUnten > DDS_HOEHE) yUnten = DDS_HOEHE;
        if (yOben < 0) yOben = 0;
    
        if (solide == false)
        {
            for (int i=xLinks; i>=xRechts; i++)
            {
                vram[i +yOben*Zeilenbreite] = Farbe;
                vram[i * yUnten+Zeilenbreite]= Farbe;
            }
    
            for ( int j=yOben;j<=yUnten;j++)
            {
                vram[xRechts +j*Zeilenbreite] = Farbe;
                vram[xLinks +j*Zeilenbreite] = Farbe;
            }
        }
        else
        {
            for (int k=xRechts;k<=xLinks;k++)
            {
                for(int h=yOben;h<=yUnten;h++)
                {
                    vram[k + h*Zeilenbreite] = Farbe;
                }
            }
        }
        lpDDSurf->Unlock(NULL);
        return true;
    }
    Ich hoffe ihr könnt mir jetzt helfen. Aber trotzdem schon mal Danke
    mfg jube
    

    [ Dieser Beitrag wurde am 10.03.2003 um 20:14 Uhr von jube editiert. ]



  • Hi,

    Du hast bei den Funktionsköpfen das 'm' von 'xxxMale...' öfters auch mal klein geschrieben. C unterscheidet zwischen Gross- und Kleinschreibung und findet die Funktion daher nicht, weil Du sie mit Grossschreibung aufrufst.

    Und entferne mal die doppelten Funktionsprototypen 😉

    Ciao,
    Stefan



  • Hi,
    Danke für deine hilfe. Jetzt gehts
    mfg julian


Anmelden zum Antworten