compiler error in Verbindung mit DX. Please help
-
Hallo zusammen!
Hab mal ein kleines Prog zusammengestellt. Es macht nichts anderes, als ein DD7 Object zu erstellen um es gleich wieder freizugeben.
VC compiliert das Prog auch problemlos, aber beim Linker-Vorgang erhalte ich folgende Fehlermeldung:
ROG8_3.OBJ : error LNK2001: Nichtaufgeloestes externes Symbol _DirectDrawCreateEx@16
Debug/Test.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.Bitte seht euch doch mal mein kleines Programm durch.
// PROG8_3.CPP - Creates a DirectDraw object and changes display // INCLUDES /////////////////////////////////////////////// #define WIN32_LEAN_AND_MEAN #define INITGUID #include <windows.h> // include important windows stuff #include <windowsx.h> #include <mmsystem.h> #include <iostream.h> // include important C/C++ stuff #include <conio.h> #include <stdlib.h> #include <malloc.h> #include <memory.h> #include <string.h> #include <stdarg.h> #include <stdio.h> #include <math.h> #include <io.h> #include <fcntl.h> #include <ddraw.h> // directX includes // DEFINES //////////////////////////////////////////////// // defines for windows #define WINDOW_CLASS_NAME "WINXCLASS" // class name #define WINDOW_WIDTH 320 // size of window #define WINDOW_HEIGHT 200 // MACROS ///////////////////////////////////////////////// // these read the keyboard asynchronously #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) // PROTOTYPES ///////////////////////////////////////////// int Game_Init(void *parms=NULL); int Game_Shutdown(void *parms=NULL); int Game_Main(void *parms=NULL); // GLOBALS //////////////////////////////////////////////// HWND main_window_handle = NULL; // save the window handle HINSTANCE main_instance = NULL; // save the instance char buffer[80]; // used to print text LPDIRECTDRAW7 lpdd; // pointer to direct draw object // FUNCTIONS ////////////////////////////////////////////// LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { // this is the main message handler of the system PAINTSTRUCT ps; // used in WM_PAINT HDC hdc; // handle to a device context // what is the message switch(msg) { case WM_CREATE: { // do initialization stuff here return(0); } break; case WM_PAINT: { // start painting hdc = BeginPaint(hwnd,&ps); // end painting EndPaint(hwnd,&ps); return(0); } break; case WM_DESTROY: { // kill the application PostQuitMessage(0); return(0); } break; default:break; } // end switch // process any messages that we didn't take care of return (DefWindowProc(hwnd, msg, wparam, lparam)); } // end WinProc // WINMAIN //////////////////////////////////////////////// int WINAPI WinMain( HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { WNDCLASS winclass; // this will hold the class we create HWND hwnd; // generic window handle MSG msg; // generic message HDC hdc; // generic dc PAINTSTRUCT ps; // generic paintstruct // first fill in the window class stucture winclass.style = CS_DBLCLKS | CS_OWNDC | 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; // register the window class if (!RegisterClass(&winclass)) return(0); // create the window if (!(hwnd = CreateWindow(WINDOW_CLASS_NAME, // class "WinX Game Console", // title WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0,0, // x,y WINDOW_WIDTH, // width WINDOW_HEIGHT, // height NULL, // handle to parent NULL, // handle to menu hinstance,// instance NULL))) // creation parms return(0); // save the window handle and instance in a global main_window_handle = hwnd; main_instance = hinstance; // perform all game console specific initialization Game_Init(); // enter main event loop while(1) { if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { // test if this is a quit if (msg.message == WM_QUIT) break; // translate any accelerator keys TranslateMessage(&msg); // send the message to the window proc DispatchMessage(&msg); } // end if // main game processing goes here Game_Main(); } // end while // shutdown game and release all resources Game_Shutdown(); // return to Windows like this return(msg.wParam); } // end WinMain // WINX GAME PROGRAMMING CONSOLE FUNCTIONS //////////////// int Game_Init(void *parms) { // this function is where you do all the initialization // for your game // create object and test for error if (DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)!=DD_OK) return(0); // set cooperation level to windowed mode normal if ((lpdd->SetCooperativeLevel(main_window_handle, DDSCL_ALLOWMODEX | DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT))!=DD_OK) return(0); // set the display mode if ((lpdd->SetDisplayMode(640,480,8,0,0))!=DD_OK) return(0); // return success return(1); } // end Game_Init /////////////////////////////////////////////////////////// int Game_Shutdown(void *parms) { // this function is where you shutdown your game and // release all resources that you allocated // release the directdraw object if (lpdd!=NULL) lpdd->Release(); // return success return(1); } // end Game_Shutdown /////////////////////////////////////////////////////////// int Game_Main(void *parms) { // this is the workhorse of your game it will be called // continuously in real-time this is like main() in C // all the calls for you game go here! // check of user is trying to exit if (KEY_DOWN(VK_ESCAPE) || KEY_DOWN(VK_SPACE)) PostMessage(main_window_handle, WM_DESTROY,0,0); // return success return(1); } // end Game_Main ///////////////////////////////////////////////////////////
Ich hab mit DX net so viel Erfahrung, bitte helft mir weiter wenn ihr könnt. Meine Motivation ist jetzt natürlich im Keller.
MfG
-
Hast Du zu ddraw.lib und dxguid.lib gelinkt und sind die DXSDK-Lib-Verzeichnisse im VC++ "ganz oben"?
-
Ahh, warum haben die Mods die Antworten auf solche Fragen immer noch nicht in der FAQ? Oder war wieder mal jemand zu faul die rauszusuchen?
-
sagmal wieviele unnütze Header includierst du eigentlich??????????????
du brauchst doch nur windows.h und ddraw.h mehr doch nicht???!!!!????!!!
-
Hallo! Ja klar, hab die Bibliotheken eingebunden. Hat schon jemand versucht das prog bei sich zu linken? Kann das mal jemand tun? Bei mir funktioniert es einfach nicht.
Dankschö
-
schon wieder so ein "ich progge mir mein game und copy&paste mir den ganzen code wo her. die kommentare mach ich natürlich auf english, ist viel 1337er und wozu auf vernünftige deutsche ausdrucksweise achten?"-kiddie
-
Original erstellt von <Adidas>:
Hat schon jemand versucht das prog bei sich zu linken?OMG - Okay... drück' mich gerade vor'm Aufräumen, also paßt es g'rad'.
Schnell'n Projekt aufgemacht und ZACK:
Temporäre Dateien und Ausgabedateien für "cpptzt - Win32 Debug" werden gelöscht.
--------------------Konfiguration: cpptzt - Win32 Debug--------------------
Kompilierung läuft...
ztz.cpp
x:\coden\projekte\cpptzt\ztz.cpp(109) : warning C4101: 'ps' : Unreferenzierte lokale Variable
x:\coden\projekte\cpptzt\ztz.cpp(108) : warning C4101: 'hdc' : Unreferenzierte lokale Variable
Linker-Vorgang läuft...cpptzt.exe - 0 Fehler, 2 Warnung(en)
Alles klar?!?