|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Fruchteis Mini JLI'ler
Anmeldedatum: 15.09.2007 Beiträge: 27 Wohnort: Heidelberg Medaillen: Keine
|
Verfasst am: 31.12.2007, 19:52 Titel: Einbinden von DirectX in Visual C++ 2008 |
|
|
Code: | 1>------ Build started: Project: DirectXGraphics, Configuration: Debug Win32 ------
1>Linking...
1>DirectXGraphics.obj : error LNK2019: unresolved external symbol _Direct3DCreate9@4 referenced in function "int __cdecl InitDirect3D(struct HWND__ *)" (?InitDirect3D@@YAHPAUHWND__@@@Z)
1>C:\Users\Christian Middeldorf\Documents\Visual Studio 2008\Projects\Quelltext\Spieleprogrammierung mit Directx\Kapitel 19\DirectXGraphics\Debug\DirectXGraphics.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://c:\Users\Christian Middeldorf\Documents\Visual Studio 2008\Projects\Quelltext\Spieleprogrammierung mit Directx\Kapitel 19\DirectXGraphics\DirectXGraphics\Debug\BuildLog.htm"
1>DirectXGraphics - 2 error(s), 0 warning(s) |
Ich benutze das Directx SDK von November diesen Jahres und dazu Visual C++ 2008 Beta3.
Eingebunden habe ich jedenfalls d3d9.h als auch d3dx9.h.
Leider stehen mir im Moment keine weiteren IDE wie z.B Code::Blocks oder Visual C++ 2005, mit denen ich früher gearbeitet habe, zur Verfügung. Somit fällt es mir schwer zu prüfen, ob der Grund des Fehlers eventuel Visual C++ 2008 ist.
Ich hoffe ihr könnt mir behilflich sein.
In poste mal meinen Quellcode:
CPP: | /*Programmname: DirectxGraphics*/
#include <windows.h>
#include <iostream>
#include <cstring>
#include <iomanip>
#include <cstdio>
#include <d3d9.h>
#include <d3dx9.h>
/*Prototypen_Deklaration*/
HWND CreateMainWindow(HINSTANCE hInstance) ;
BOOL InitDirect3D(HWND hWnd) ;
void CleanUpDirect3D(void) ;
LRESULT CALLBACK MessageHandler(HWND hWnd, UINT msg,
WPARAM wParam, LPARAM lParam);
/*Globale_Variablen*/
HWND hWnd; /*Das Handle des Fensters */
LPDIRECT3D9 lpD3D = NULL; /*Zeiger auf das Direct3D-Objekt */
LPDIRECT3DDEVICE9 lpD3DDevice = NULL; /*Zeiger auf das Direct3D-Device */
LPD3DXFONT lpD3DFont = NULL; /*Zeiger auf das Direct3D-Font-Objekt*/
/*Haupt_Programm*/
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nShowCmd)
{
/*Variablen*/
MSG msg ; /*Die Nachrichten-Struktur*/
/*Das Fenster, mittels CreateMainWindow(), erzeugen*/
hWnd = CreateMainWindow(hInstance);
/*Wenn der Rückgabewert gleich NULL ist, so ist ein */
/*Fehler aufgetreten*/
if(NULL == hWnd)
{
MessageBox(NULL, "Das Fenster konnte nicht erstellt werden",
"Fehler", MB_OK);
return(0);
}
if(!InitDirect3D(hWnd))
{
/*Fehler beim initialisieren von D3D*/
return(-1);
}
/*Diese Schleife läuft so lange, bist die Nachricht*/
/*WM_QUIT empfangen wird*/
while(GetMessage(&msg, NULL, 0, 0))
{
/*Nachricht an die Callback_Funktion senden*/
DispatchMessage(&msg) ;
TranslateMessage(&msg);
}
/*Direct3D-Objekt wieder freigeben*/
CleanUpDirect3D();
/*Programm_Beenden*/
return(0);
}/*WinMain_Funktion*/
/*Funktions_Definition*/
/*CreateMainWindow()*/
/*Funktion: Erzeugt das Haupt-Fenster und gibt ein Hangle zurück*/
HWND CreateMainWindow(HINSTANCE hInstance)
{
/*Fensterklasse erzeugen*/
WNDCLASSEX WndClass =
{
sizeof(WNDCLASSEX) , /*Struktur_Größe */
CS_DBLCLKS | CS_OWNDC | /*Fenster_Stile */
CS_HREDRAW | CS_VREDRAW ,
MessageHandler , /*Callback_Funktion*/
0, /*Class_Speicher */
0, /*Fenster_Speicher */
hInstance, /*Anwenungs_Instanz*/
LoadIcon(NULL, IDI_ERROR), /*Windows_Logo */
LoadCursor(NULL, IDC_HAND), /*Normaler_Cursor */
(HBRUSH)GetStockObject(BLACK_PEN), /*Hintergrund_Farbe*/
NULL, /*Ein_Menü */
"WindowClass", /*Klassen_Name */
LoadIcon(NULL, IDI_EXCLAMATION) /*Windows_Logo */
};
/*Fensterklasse registrieren, damit sie von CreateWindowEx()*/
/*verwendet werden kann*/
RegisterClassEx(&WndClass);
/*Der Rückgabewert von CreateWindowEx() ist auch der*/
/*Rückgabewert der Funktion*/
return(CreateWindowEx
(
NULL , /*Erweiterte_Stile */
"WindowClass", /*Klassen_Name */
"Ein Fenster", /*Fenster_Titel */
WS_OVERLAPPEDWINDOW | /*Fenster_Eigenschaften*/
WS_VISIBLE ,
0, 0 , /*Fenster_Koordinaten */
300, 400 , /*Fenster_Größe */
NULL, /*Parent_Handle */
NULL , /*Menü_Hanlde */
hInstance , /*Anwendungs_Instanz */
NULL /*MDI_Anwendung */
));
}/*CreateMainWindow_Funktion*/
/*CALLBACK()*/
/*Funktion: Behandelt die Nachrichten, die für das Fenster vorliegen*/
LRESULT CALLBACK MessageHandler(HWND hWnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
/*Lokale_Variablen*/
D3DCOLOR ClearColor = D3DCOLOR_XRGB(0, 0, 0xFF); /*Farbe zum Füllen des Backpufers*/
/*Entscheigen, welche Nachricht empfangen wurde*/
switch(msg)
{
case(WM_DESTROY):
{
PostQuitMessage(WM_QUIT);
return(0);
}break;
case WM_PAINT:
{
/*Puffer mit Blau füllen*/
lpD3DDevice->Clear(0, 0,
D3DCLEAR_TARGET,
ClearColor,
0, 0);
lpD3DDevice->BeginScene();
lpD3DDevice->EndScene() ;
lpD3DDevice->Present(0, 0, 0, 0);
}break;
}
return (DefWindowProc(hWnd, msg, wParam, lParam));
}/*CALLBACK_Funktion*/
/*Funktionsname: InitDirect3D */
/*Funktion : Initialisiert Direct3D*/
BOOL InitDirect3D(HWND hWnd)
{
/*Lokale_Variablen*/
/*Direct3D-Objekt erzeugen*/
lpD3D = Direct3DCreate9(D3D_SDK_VERSION);
/*Abfrage nach gültiger Zuweisung*/
if(NULL == lpD3D)
{
/*Fehler, D3D-Objekt wurde nicht erzeugt*/
return(FALSE);
}
/*Parameter für den Modus festlegen*/
D3DPRESENT_PARAMETERS PParams;
ZeroMemory(&PParams, sizeof(PParams));
PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
PParams.hDeviceWindow = hWnd ;
PParams.Windowed = TRUE ;
PParams.BackBufferWidth = 800 ;
PParams.BackBufferHeight = 600 ;
PParams.BackBufferFormat = D3DFMT_A8R8G8B8 ;
/*Direct3D-Gerät anlegen*/
if(FAILED(lpD3D->CreateDevice(
D3DADAPTER_DEFAULT ,
D3DDEVTYPE_HAL ,
hWnd ,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&PParams ,
&lpD3DDevice)))
{
/*Fehler, kann Gerät nicht anlegen*/
return(FALSE);
}
/*Programm_Beenden*/
return(TRUE);
}/*InitDirect3D_Funktiion*/
/*Funktionsname: CleanUpDirect3D */
/*Funktion : Alle erzeugten Direct3D-Objekte freigeben*/
void CleanUpDirect3D(void)
{
/*Testen, ob die Objekte angelegt wurden und ggf. freigeben*/
if(NULL != lpD3DDevice)
{
lpD3DDevice->Release();
lpD3DDevice = NULL ;
}
if(NULL != lpD3D)
{
lpD3D->Release();
lpD3D = NULL ;
}
}/*CleanUpDirect3D_Funktion*/ |
|
|
Nach oben |
|
|
fkrauthan Junior JLI'ler
Alter: 33 Anmeldedatum: 10.04.2005 Beiträge: 96 Wohnort: Germering Medaillen: Keine
|
Verfasst am: 01.01.2008, 11:16 Titel: |
|
|
Du musst noch die Librarys eintragen gehe dazu auf Projekt Einstellungen.
Dorten unter Linker Externe Librarys(? Glaub so müsste der Punkt heißen) und dorten musst du die namen von den benötigten Librarys eintragen. Sollte im Buch bzw Tut stehen wie die heißen _________________
"Die Codeschleuder" das Spieleprogrammierer Magazin |
|
Nach oben |
|
|
Fruchteis Mini JLI'ler
Anmeldedatum: 15.09.2007 Beiträge: 27 Wohnort: Heidelberg Medaillen: Keine
|
Verfasst am: 01.01.2008, 13:14 Titel: |
|
|
Ist geschafft. Ich musste es bei Linker->Command Line eintragen.
Danke. _________________ Ein Beweis für Programmierer:
Jedes Programm läßt sich um mindestens eine Anweisung kürzen.
Jedes Programm hat mindestens einen Fehler.
Durch Induktion können wir schließen:
Jedes Programm ist reduzierbar auf eine Anweisung, die nicht funktioniert... |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 01.01.2008, 14:42 Titel: |
|
|
Fruchteis hat Folgendes geschrieben: | Ist geschafft. Ich musste es bei Linker->Command Line eintragen.
Danke. |
etwas übersichtlicher ist es, die bei Linker Input Additional Dependecies einzutragen
Gruß DXer |
|
Nach oben |
|
|
fkrauthan Junior JLI'ler
Alter: 33 Anmeldedatum: 10.04.2005 Beiträge: 96 Wohnort: Germering Medaillen: Keine
|
|
Nach oben |
|
|
Fruchteis Mini JLI'ler
Anmeldedatum: 15.09.2007 Beiträge: 27 Wohnort: Heidelberg Medaillen: Keine
|
Verfasst am: 01.01.2008, 14:59 Titel: |
|
|
Danke _________________ Ein Beweis für Programmierer:
Jedes Programm läßt sich um mindestens eine Anweisung kürzen.
Jedes Programm hat mindestens einen Fehler.
Durch Induktion können wir schließen:
Jedes Programm ist reduzierbar auf eine Anweisung, die nicht funktioniert... |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|