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 VerweiseDas 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