# DirectX "stürzt ab"



## anfängerregnäfna (12. August 2009)

Hallo,
ich bin ein Anfänger in der Programmierung mit DirectX und habe gerade mein erstes Programm geschrieben.
Es soll ein einfaches Dreieck darstellen.
Als IDE habe ich CodeBlocks verwendet, die Kompilierung funktionierte problemlos.
Aber bei der Ausführung meldet sich Windows "Dreieck.exe hat ein Problem festgestellt und muss beendet werden".
Die Datei "TriBase.h" bindet eine 3D Engine ein, die in dem Buch, mit dem ich DirectX lerne verwendet wird. Die Klassen tbVector3 und tbColor stammen aus dieser Engine und stellen einfach einen 3DVektor, bzw. eine Farbe dar.
Auch nach eingehender Suche kann ich den Fehler nicht finden,
hier mein Quellcode
	
	
	



```
#include <d3d9.h>
#include<d3dx9.h>
#include <tribase.h>
#include <windows.h>


PDIRECT3D9 g_pd3d=0;
PDIRECT3DDEVICE9 g_pd3ddev=0;
int g_width=1000;
int g_height=1000;
HWND hwnd;               /* This is the handle for our window */
MSG messages;
int g_anzdreiecke=1;
struct SVertex
{tbVector3 vPosition;
tbColor dwColor;
};
SVertex g_tv[3];

init(HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow);
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
void initdx();
void Render();
void Move();
int WINAPI WinMain(HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
init(hThisInstance,hPrevInstance,lpszArgument,nCmdShow);
initdx();
g_pd3ddev->SetRenderState(D3DRS_LIGHTING,FALSE);
g_pd3ddev->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);
g_pd3ddev->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
g_pd3ddev->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
g_pd3ddev->SetRenderState(D3DRS_ZENABLE,TRUE);
g_pd3ddev->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE);
g_tv[0].vPosition=tbVector3(1.0f,1.0f,1.0f);
g_tv[1].vPosition=tbVector3(2.0f,1.0f,1.0f);
g_tv[2].vPosition=tbVector3(1.5f,2.0f,1.0f);
g_tv[0].dwColor=tbColor(1.0f,0.0f,0.0f);
g_tv[1].dwColor=tbColor(1.0f,0.0f,0.0f);
g_tv[2].dwColor=tbColor(1.0f,0.0f,0.0f);
while(messages.message!=WM_QUIT){
while(PeekMessage(&messages,NULL,0,0,PM_REMOVE))
{TranslateMessage(&messages);
DispatchMessage(&messages);}
Render();
Move();
}
return 0;
}
init(HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = "szClassName";
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default colour as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           "szClassName",         /* Classname */
           "Code::Blocks Template Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           g_width,                 /* The programs width */
           g_height,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );
ShowWindow (hwnd, nCmdShow);
return 0;};
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
void Render()
{
g_pd3ddev->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(200,200,200),1.0,(DWORD)0.0f);
g_pd3ddev->BeginScene();
g_pd3ddev->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1,g_tv,sizeof(g_tv));
g_pd3ddev->EndScene();
g_pd3ddev->Present(NULL,NULL,NULL,NULL);
};
void Move(){};
void initdx()
{
g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);
D3DDISPLAYMODE d;
g_pd3d->GetAdapterDisplayMode(0,&d);
D3DPRESENT_PARAMETERS pParam;
ZeroMemory(&pParam,sizeof(pParam));
pParam.BackBufferWidth=d.Width;
pParam.BackBufferHeight=d.Height;
pParam.BackBufferFormat=d.Format;
pParam.BackBufferCount=1;
pParam.MultiSampleType=D3DMULTISAMPLE_NONE;
//pParam.MultiSampleQuality=1;
pParam.SwapEffect=D3DSWAPEFFECT_COPY;
pParam.hDeviceWindow=hwnd;
pParam.Windowed=TRUE;
pParam.EnableAutoDepthStencil=false;
//pParam.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
pParam.FullScreen_RefreshRateInHz=d.RefreshRate;
pParam.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
g_pd3d->CreateDevice(0,D3DDEVTYPE_HAL,hwnd,D3DCREATE_MIXED_VERTEXPROCESSING,&pParam,&g_pd3ddev);
};
```
Kann mir jemand helfen?


----------



## vfl_freak (12. August 2009)

Moin,

die von Dir genannte Fehlermeldung klingt für mich so auf den ersten 'Blick' nach einem Speicherfehler (Zugriffsverletzung etc.).
Versuch mal mit dem Debugger die konkrete Zeile zu ermitteln - dann hat man vlt. 'ne Chance, was dazu zu sagen ...

Gruß
Klaus


----------



## anfängerregnäfna (12. August 2009)

Vielen Dank für den Tipp,
leider habe ich noch keinen Debugger installiert. Ich nutze visual toolkit 2003. Kann mir vieleicht jemand sagen, wo ich einen Debugger downloaden kann?


----------



## vfl_freak (12. August 2009)

Moin,

oops, das ist wohl ziemlich veraltet ;-]
Ein direkten Debugger dafür kenne ich nicht! 

Du solltest vlt. mal über die deutlich aktuellere Version         Visual C++ 2008 Express Edition nachdenken! Da ist meines Wissen ein Debugger enthalten

Folgende mal diesem Link:
http://msdn.microsoft.com/de-de/visualc/aa336490(en-us).aspx

BTW: OHNE Debugger ist komplexere Programmentwicklung fast unmöglich 

Gruß
Klaus


----------



## Anfänger92 (12. August 2009)

Hallo,

das Buch habe ich auch.

Ich muss sagen es ist wirklich gut. 

Es gibt auch nen Forum zu dem Buch hier. Den Link findeste aber auch im Buch.

Falls du speziell Fragen zum Buch hast kanste dich auch direkt bei mir melden.

So zu deinem Prob:
Downloade auf jeden Fall die neue Version. Die Express version ist ziemlich gut und nen Debuger brauchst du auf jeden Fall sonst kommst du denke ihc mal nicht weit.
Spätestens wenn du deine ersten eigenen kleinen Experimente machst wirds schwierig.

Gruß
Anfänger


----------



## anfängerregnäfna (13. August 2009)

Diese IDE habe ich auch installiert. Doch trotz (meiner Meinung nach) korrekt eingefügten \include und \lib Dateien gibt vC++ 2008, bei dem gleichen Quellcode folgende Warnung aus

```
Kompilieren...
cl : Command line warning D4002 : ignoring unknown option '/errorReport:prompt'
cl : Command line warning D4024 : unrecognized source file type 'ÿþ/', object file assumed
LINK : fatal error LNK1181: cannot open input file ' ?/.obj'
```


----------



## deepthroat (13. August 2009)

Hi.





anfängerregnäfna hat gesagt.:


> Diese IDE habe ich auch installiert. Doch trotz (meiner Meinung nach) korrekt eingefügten \include und \lib Dateien gibt vC++ 2008, bei dem gleichen Quellcode folgende Warnung aus
> 
> ```
> Kompilieren...
> ...


Also irgendwas hast du falsch gemacht. Wo kommen denn die komischen Zeichen her? Woher kommt die /errorReport Option, die der Kompiler eigentlich kennen sollte? (poste mal das BuildLog)

Warum verwendest du denn nicht einfach CodeBlocks wenn du es schon installiert hast und dein Projekt kompilieren konntest? Da gibt es doch auch einen Debug-Modus.

Gruß


----------



## anfängerregnäfna (13. August 2009)

Hier ist das BuildLog

```
Buildprotokoll     Erstellen wurde gestartet: Projekt: "dreick", Konfiguration: "Release|Win32"
 Befehlszeilen     Die temporäre Datei "c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Release\RSP0000011922724.rsp" wird erstellt. Inhalt:
[
/O2 /Oi /GL /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy /Fo"Release\\" /Fd"Release\vc90.pdb" /W3 /c /Zi /TP ".\khtd.cpp"
]Erstellen der Befehlszeile "cl.exe @"c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Release\RSP0000011922724.rsp" /nologo /errorReport:prompt" Ausgabefenster     Kompilieren...
cl : Command line warning D4002 : ignoring unknown option '/errorReport:prompt'
cl : Command line warning D4024 : unrecognized source file type 'ÿþ/', object file assumed
LINK : fatal error LNK1181: cannot open input file ' ?/.obj'
 Ergebnisse     Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Release\BuildLog.htm" gespeichert.
dreick - 1 Fehler, 2 Warnung(en)
```
Außerdem die Liste mit den \include und \lib Anweisungen die ich angegeben habe

```
C:\Programme\TriBase\Include
C:\Programme\Microsoft Platform SDK\Include
C:\Programme\Microsoft Visual C++ Toolkit 2003\include
C:\Programme\Microsoft DirectX SDK (March 2009)\Include

C:\Programme\TriBase\Lib
C:\Programme\Microsoft Platform SDK\Lib
C:\Programme\Microsoft Visual C++ Toolkit 2003\lib
C:\Programme\Microsoft DirectX SDK (March 2009)\Lib\x86
```


----------



## vfl_freak (13. August 2009)

> cl : Command line warning D4002 : ignoring unknown option '/errorReportrompt'
> cl : Command line warning D4024 : unrecognized source file type 'ÿþ/', object file assumed
> LINK : fatal error LNK1181: cannot open input file ' ?/.obj'



Moin,

wie deepthroat schon schrieb, sind dies die problematischen Zeilen!

Also, was ist mit dieser  '/errorReportrompt'-Option? Woher kommt sie?
'ÿþ/' und '?/.obj' sieht für mich irgendwie nach Speicherproblemen aus !

Versuch mal im Debugger, die Quelle zu identifizieren !

Gruß
Klaus


----------



## deepthroat (13. August 2009)

Hi.

Was hast du denn jetzt installiert?

Ich dachte du verwendest jetzt VS 2008? Warum gibst du denn dann dort die Verzeichnisse vom Visual C++ Toolkit 2003 an? Nimm die Pfade mal raus.

Auch die Pfade vom Plattform SDK mußt du eigentlich nicht angeben, die findet das Studio eigentlich selbst.

Irgendwie sieht es so aus, als würdest du den C/C++ Compiler vom Visual Toolkit mit dem Visual Studio 2008 benutzen? Deinstallier mal das Visual C++ Toolkit 2003.

Gruß

PS: Wenn du debuggen willst, dann solltest du auch im Debug Modus kompilieren (Konfiguration: Debug)


----------



## anfängerregnäfna (13. August 2009)

Ich habe die Pfade zum c++ toolkit 2003 entfernt und erneut versucht zu kompilieren (im Debug Modus). Erneut Fehlermeldungen, hier das Build Log:

```
Buildprotokoll     Erstellen wurde gestartet: Projekt: "dreick", Konfiguration: "Debug|Win32"
 Befehlszeilen     Die temporäre Datei "c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\RSP0000045082544.rsp" wird erstellt. Inhalt:
[
/Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /c /ZI /TP ".\khtd.cpp"
]Erstellen der Befehlszeile "cl.exe @"c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\RSP0000045082544.rsp" /nologo /errorReport:prompt" Ausgabefenster     Kompilieren...
cl : Command line warning D4002 : ignoring unknown option '/errorReport:prompt'
cl : Command line warning D4024 : unrecognized source file type 'ÿþ/', object file assumed
LINK : fatal error LNK1181: cannot open input file ' ?/.obj'
 Ergebnisse     Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\BuildLog.htm" gespeichert.
dreick - 1 Fehler, 2 Warnung(en)
```

Um absolut sicherzugehen, dass dieser Fehler nur im visual studio 2008 auftritt, habe ich den Code aus Code::Blocks originalgetreu in vc++2008 übernommen. Interessanterweise lässt sich , nach einigen kleinen Änderungen (alle rückgängig gemacht) auch der Code in Code::Blocks nicht mehr kompilieren.
Für Hilfe wäre ich sehr dankbar.
Hier noch einmal der Quellcode:

```
#include <d3d9.h>
#include <d3dx9.h>
#include <tribase.h>
#include <windows.h>


PDIRECT3D9 g_pd3d=0;
PDIRECT3DDEVICE9 g_pd3ddev=0;
int g_width=1000;
int g_height=1000;
HWND hwnd;               /* This is the handle for our window */
MSG messages;
int g_anzdreiecke=1;
struct SVertex
{tbVector3 vPosition;
tbColor dwColor;
};
SVertex g_tv[3];

init(HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow);
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
void initdx();
void Render();
void Move();
int WINAPI WinMain(HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
init(hThisInstance,hPrevInstance,lpszArgument,nCmdShow);
initdx();
g_pd3ddev->SetRenderState(D3DRS_LIGHTING,FALSE);
g_pd3ddev->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);
g_pd3ddev->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
g_pd3ddev->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
g_pd3ddev->SetRenderState(D3DRS_ZENABLE,TRUE);
g_pd3ddev->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE);
g_tv[0].vPosition=tbVector3(1.0f,1.0f,1.0f);
g_tv[1].vPosition=tbVector3(2.0f,1.0f,1.0f);
g_tv[2].vPosition=tbVector3(1.5f,2.0f,1.0f);
g_tv[0].dwColor=tbColor(1.0f,0.0f,0.0f);
g_tv[1].dwColor=tbColor(1.0f,0.0f,0.0f);
g_tv[2].dwColor=tbColor(1.0f,0.0f,0.0f);

while(messages.message!=WM_QUIT){
while(PeekMessage(&messages,NULL,0,0,PM_REMOVE))
{TranslateMessage(&messages);
DispatchMessage(&messages);}
Render();
Move();
}
return 0;
}
init(HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = "szClassName";
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default colour as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           "szClassName",         /* Classname */
           "Code::Blocks Template Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           g_width,                 /* The programs width */
           g_height,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );
ShowWindow (hwnd, nCmdShow);
return 0;};
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
void Render()
{
g_pd3ddev->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(200,200,200),1.0,(DWORD)0.0f);
g_pd3ddev->BeginScene();
g_pd3ddev->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1,g_tv,sizeof(g_tv));
g_pd3ddev->EndScene();
g_pd3ddev->Present(NULL,NULL,NULL,NULL);
};
void Move(){};
void initdx()
{
g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);
D3DDISPLAYMODE d;
g_pd3d->GetAdapterDisplayMode(0,&d);
D3DPRESENT_PARAMETERS pParam;
ZeroMemory(&pParam,sizeof(pParam));
pParam.BackBufferWidth=d.Width;
pParam.BackBufferHeight=d.Height;
pParam.BackBufferFormat=d.Format;
pParam.BackBufferCount=1;
pParam.MultiSampleType=D3DMULTISAMPLE_NONE;
pParam.MultiSampleQuality=NULL;
pParam.SwapEffect=D3DSWAPEFFECT_COPY;
pParam.hDeviceWindow=hwnd;
pParam.Windowed=TRUE;
pParam.EnableAutoDepthStencil=false;
pParam.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
pParam.FullScreen_RefreshRateInHz=d.RefreshRate;
pParam.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
g_pd3d->CreateDevice(0,D3DDEVTYPE_HAL,hwnd,D3DCREATE_MIXED_VERTEXPROCESSING,&pParam,&g_pd3ddev);
};
```


----------



## deepthroat (13. August 2009)

Und warum hast du es es nicht deinstalliert?

Und was benutzt du denn nun?

Warum beantwortest du denn keine Fragen? ;-]


----------



## anfängerregnäfna (13. August 2009)

Ich habe das c++ toolkit 2003 nicht deinstalliert, weil ich es mit Code::Blocks verwende,

vc++2008 habe ich keinen anderen Compiler angegeben, ich bin davon ausgegangen, dass es einen "Default"-Compiler konfiguriert hat.

Welchen Compiler würdest du mir empfehlen?


----------



## deepthroat (13. August 2009)

anfängerregnäfna hat gesagt.:
			
		

> Um absolut sicherzugehen, dass dieser Fehler nur im visual studio 2008 auftritt, habe ich den Code aus Code::Blocks originalgetreu in vc++2008 übernommen. Interessanterweise lässt sich , nach einigen kleinen Änderungen (alle rückgängig gemacht) auch der Code in Code::Blocks nicht mehr kompilieren.


Fehlermeldungen. Fehlermeldungen. Fehlermeldungen.


----------



## anfängerregnäfna (13. August 2009)

Oh, Entschuldigung, hab ich vergessen.
Das Build Log lautet:

```
-------------- Build: Debug in dreieck ---------------

Linking console executable: bin\Debug\dreieck.exe
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class tbColor & __thiscall tbColor::operator=(class tbColor const &)" (__imp_4tbColor@@QAEAAV0@ABV0@@Z) referenced in function _WinMain@16
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall tbColor::tbColor(float,float,float)" (__imp_0tbColor@@QAE@MMM@Z) referenced in function _WinMain@16
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class tbVector3 & __thiscall tbVector3::operator=(class tbVector3 const &)" (__imp_4tbVector3@@QAEAAV0@ABV0@@Z) referenced in function _WinMain@16
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall tbVector3::tbVector3(float,float,float)" (__imp_0tbVector3@@QAE@MMM@Z) referenced in function _WinMain@16
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall tbColor::tbColor(void)" (__imp_0tbColor@@QAE@XZ) referenced in function "public: __thiscall SVertex::SVertex(void)" (0SVertex@@QAE@XZ)
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall tbVector3::tbVector3(void)" (__imp_0tbVector3@@QAE@XZ) referenced in function "public: __thiscall SVertex::SVertex(void)" (0SVertex@@QAE@XZ)
bin\Debug\dreieck.exe : fatal error LNK1120: 6 unresolved externals
Process terminated with status 1120 (0 minutes, 0 seconds)
7 errors, 0 warnings
```


----------



## deepthroat (13. August 2009)

anfängerregnäfna hat gesagt.:


> Oh, Entschuldigung, hab ich vergessen.
> Das Build Log lautet:
> 
> ```
> ...


Du hast offenbar vergessen die TriBase Bibliothek einzubinden.

Gruß


----------



## anfängerregnäfna (13. August 2009)

Dachte ich auch erst, aber der Quellcode ist exakt der oben gepostete. Die Engine wurde eingebunden.


----------



## deepthroat (13. August 2009)

anfängerregnäfna hat gesagt.:


> Ich habe das c++ toolkit 2003 nicht deinstalliert, weil ich es mit Code::Blocks verwende


Aha.


anfängerregnäfna hat gesagt.:


> vc++2008 habe ich keinen anderen Compiler angegeben, ich bin davon ausgegangen, dass es einen "Default"-Compiler konfiguriert hat.


Hat es auch. Mein VS 2008 C/C++ Compiler versteht allerdings die /errorReport Option, deiner offensichtlich nicht. Das ist etwas merkwürdig.


anfängerregnäfna hat gesagt.:


> Welchen Compiler würdest du mir empfehlen?


Ich weiß nicht wie der Code der TriBase Engine geschrieben ist, evlt. funktioniert der Code nur mit einem best. Compiler. Ansonsten kannst du auch mal MinGW probieren.

Gruß


----------



## deepthroat (13. August 2009)

anfängerregnäfna hat gesagt.:


> Dachte ich auch erst, aber der Quellcode ist exakt der oben gepostete. Die Engine wurde eingebunden.


Der Quellcode ist egal. Du hast die Bibliothek (.lib Datei) nicht eingebunden.

Gruß


----------



## anfängerregnäfna (13. August 2009)

Vielen Dank für den Tip. Ich glaube der MinGW Compiler war sogar bei Code::Blocks dabei. Ansonsten werde ich ihn herunterladen(sofern möglich). 
Was meinst du mit





> Hat es auch. Mein VS 2008 C/C++ Compiler versteht allerdings die /errorReport Option, deiner offensichtlich nicht. Das ist etwas merkwürdig.





> Der Quellcode ist egal. Du hast die Bibliothek (.lib Datei) nicht eingebunden.


Doch, die Datei ist angegeben.
Sowohl bei den "Link Libraries" als auch bei den  "Search Directories"


----------



## deepthroat (13. August 2009)

anfängerregnäfna hat gesagt.:
			
		

> Doch, die Datei ist angegeben.
> Sowohl bei den "Link Libraries" als auch bei den  "Search Directories"


Dann nimm das mal bei den Search Directories raus. Was soll denn eine Bibliothek da drin?


----------



## anfängerregnäfna (13. August 2009)

Bei den Search Directories gibt es einen Reiter namens "Linker".
Nachdem ich als Standard-Compiler den MinGW Compiler angegeben hatte, stand unter diesem Reiter die Angabe 
	
	
	



```
C:\MinGW\lib
```
.
Außerdem wurde in einem anderem Buch, das ich gelesen habe gesagt, man solle in dieses Menü die Pfade für das Platform-SDK und das DirectXSDK schreiben.
Deshalb habe ich die Bibliothek dort angegeben.


----------



## deepthroat (13. August 2009)

anfängerregnäfna hat gesagt.:


> Bei den Search Directories gibt es einen Reiter namens "Linker".
> Nachdem ich als Standard-Compiler den MinGW Compiler angegeben hatte, stand unter diesem Reiter die Angabe
> 
> 
> ...


Es war die Rede von *Pfaden*, nicht von Bibliotheken (Dateien).


----------



## anfängerregnäfna (13. August 2009)

Oh.
Ich habe gerade versucht eines der Spiele aus dem Buch zu starten.
Mit folgender Fehlermeldung:
	
	
	



```
Die Anwendung konnte nicht gestartet werden, weil TriBase.dll nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben
```
Ich habe den Ordner von TriBase einfach auf meine Festplatte kopiert (C:\Programme\TriBase) und dann die Verzeichnisse in Code::Blocks und vc++2008 angegeben. War das falsch? Muss ich die Datei TriBase.dll in einen speziellen Ordner kopieren...


Mein Fehler ich meinte Pfad. In habe angegeben:
	
	
	



```
C:\Programme\TriBase\Lib
```


----------



## deepthroat (13. August 2009)

anfängerregnäfna hat gesagt.:


> Ich habe den Ordner von TriBase einfach auf meine Festplatte kopiert (C:\Programme\TriBase) und dann die Verzeichnisse in Code::Blocks und vc++2008 angegeben. War das falsch? Muss ich die Datei TriBase.dll in einen speziellen Ordner kopieren...


Ja, die DLL wird in bestimmten Pfaden gesucht: http://msdn.microsoft.com/en-us/library/ms682586(VS.85).aspx

Du könntest die DLL einfach in das Verzeichnis wo deine .exe drin ist legen.

Gruß


----------



## anfängerregnäfna (13. August 2009)

Ja, nun wird die dll gefunden, aber das DirectX Programm mit dem Dreieck funktioniert immer noch nicht


----------



## deepthroat (14. August 2009)

anfängerregnäfna hat gesagt.:


> Ja, nun wird die dll gefunden, aber das DirectX Programm mit dem Dreieck funktioniert immer noch nicht


Mit welchem Compiler hast du nun kompiliert? Hast du nun einen Debugger?


----------



## anfängerregnäfna (14. August 2009)

Ich habe es sowohl mit vc++ 2008 als auch mit Code::Blocks versucht.
Code::Blocks gibt aus:

```
main.cpp
Linking console executable: bin\Debug\dreieck.exe
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class tbColor & __thiscall tbColor::operator=(class tbColor const &)" (__imp_4tbColor@@QAEAAV0@ABV0@@Z) referenced in function _WinMain@16
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall tbColor::tbColor(float,float,float)" (__imp_0tbColor@@QAE@MMM@Z) referenced in function _WinMain@16
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class tbVector3 & __thiscall tbVector3::operator=(class tbVector3 const &)" (__imp_4tbVector3@@QAEAAV0@ABV0@@Z) referenced in function _WinMain@16
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall tbVector3::tbVector3(float,float,float)" (__imp_0tbVector3@@QAE@MMM@Z) referenced in function _WinMain@16
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall tbColor::tbColor(void)" (__imp_0tbColor@@QAE@XZ) referenced in function "public: __thiscall SVertex::SVertex(void)" (0SVertex@@QAE@XZ)
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall tbVector3::tbVector3(void)" (__imp_0tbVector3@@QAE@XZ) referenced in function "public: __thiscall SVertex::SVertex(void)" (0SVertex@@QAE@XZ)
bin\Debug\dreieck.exe : fatal error LNK1120: 6 unresolved externals
Process terminated with status 1120 (0 minutes, 2 seconds)
7 errors, 0 warnings
```
vc++2008 sagt

```
Buildprotokoll     Erstellen wurde gestartet: Projekt: "dreick", Konfiguration: "Debug|Win32"
 Befehlszeilen     Die temporäre Datei "c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\RSP00000240524004.rsp" wird erstellt. Inhalt:
[
/Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /c /ZI /TP ".\khtd.cpp"
]Erstellen der Befehlszeile "cl.exe @"c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\RSP00000240524004.rsp" /nologo /errorReport:prompt" Ausgabefenster     Kompilieren...
cl : Command line warning D4002 : ignoring unknown option '/errorReport:prompt'
cl : Command line warning D4024 : unrecognized source file type 'ÿþ/', object file assumed
LINK : fatal error LNK1181: cannot open input file ' ?/.obj'
 Ergebnisse     Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\BuildLog.htm" gespeichert.
dreick - 1 Fehler, 2 Warnung(en)
```
Das Debugging konnte ich nicht starten, da nunmehr noch nicht einmal die Kompilierung funktioniert.

Zur Übersicht:
eine globale Definition:

```
struct SVertex
{tbVector3 vPosition;
tbColor dwColor;
};
SVertex g_tv[3];
```
Hier die bei Code::Blocks kritischen Zeilen ("tribase.h" ist eingebunden)

```
g_tv[0].vPosition=tbVector3(1.0f,1.0f,1.0f);
g_tv[1].vPosition=tbVector3(2.0f,1.0f,1.0f);
g_tv[2].vPosition=tbVector3(1.5f,2.0f,1.0f);
g_tv[0].dwColor=tbColor(1.0f,0.0f,0.0f);
g_tv[1].dwColor=tbColor(1.0f,0.0f,0.0f);
g_tv[2].dwColor=tbColor(1.0f,0.0f,0.0f);
```
Bei vc++ 2008 weiß ich nicht, wo der Fehler auftritt

Noch etwas wichtiges:
ich habe die Quellcode, Resource, Header ..... Dateien aus dem Bespielprogramm "Das erste Dreieck" kopiert und in ein vc++2008 Projekt eingefügt. Alle Dateien sind vorhanden, der Quellcode wurde genau wie im Buch übernommen.
Die Fehlermeldung lautet

```
Buildprotokoll     Erstellen wurde gestartet: Projekt: "Namen_eingeben", Konfiguration: "Release|Win32"
 Befehlszeilen     Die temporäre Datei "c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\Namen_eingeben\Namen_eingeben\Release\RSP00000423243664.rsp" wird erstellt. Inhalt:
[
/O2 /Oi /GL /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy /Fo"Release\\" /Fd"Release\vc90.pdb" /W3 /c /Zi /TP "d:\CD\Beispiele\Kapitel 02\03 - Das erste Dreieck\Dreieck.cpp"
]Erstellen der Befehlszeile "cl.exe @"c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\Namen_eingeben\Namen_eingeben\Release\RSP00000423243664.rsp" /nologo /errorReport:prompt" Ausgabefenster     Kompilieren...
cl : Command line warning D4002 : ignoring unknown option '/errorReport:prompt'
cl : Command line warning D4024 : unrecognized source file type 'ÿþ/', object file assumed
LINK : fatal error LNK1181: cannot open input file ' ?/.obj'
 Ergebnisse     Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\Namen_eingeben\Namen_eingeben\Release\BuildLog.htm" gespeichert.
Namen_eingeben - 1 Fehler, 2 Warnung(en)
```
Es scheint also an der vc++2008 Konfiguration zu liegen. Kann es sein, dass ich irgend etwas gravierendes vergessen habe? Ich weiß nicht mehr weiter


----------



## deepthroat (14. August 2009)

anfängerregnäfna hat gesagt.:


> Ich habe es sowohl mit vc++ 2008 als auch mit Code::Blocks versucht.


Dann versuch's mal mit MinGW.


anfängerregnäfna hat gesagt.:


> Code::Blocks gibt aus:


Geh mal in die Compiler Einstellungen, auf dem "Andere Einstellungen" Tab für "Compiler logging" wähle mal full command line. Dann zeig nochmal das Build Log.

Kann es evlt. sein, das du die Bibliothek nur in der Release Konfiguration und nicht in der Debug-Konfiguration eingegeben hast?


anfängerregnäfna hat gesagt.:


> vc++2008 sagt


Mach am besten nochmal ein neues Projekt auf.

Gruß



			
				anfängerregnäfna hat gesagt.:
			
		

> Noch etwas wichtiges:
> ich habe die Quellcode, Resource, Header ..... Dateien aus dem Bespielprogramm "Das erste Dreieck" kopiert und in ein vc++2008 Projekt eingefügt.


Das ist zu ungenau. Was genau hast du wo eingefügt? Was für ein Projekt hast du angelegt?

\edit: oder poste einfach mal die .vcproj Datei. (als .txt anhängen)


----------



## anfängerregnäfna (14. August 2009)

Code::Blocks verwendet MinGW

Eine Einstellung "full command line" habe ich weder bei code:.blocks noch bei vc++2008 gefunden.

Die Bibliothek wurde (im Quellcode) in beiden Dateien angegeben(Debug/Release)

Im Anhang müsste sich die .vcproj Datei vom Beispielprogramm aus dem Buch befinden (als .txt) ,da ich noch nicht sehr viel Erfaahrung mit diesem Forum habe schreibe ich sie noch einmal als Code


```
<?xml version="1.0" encoding="W
indows-1252"?>
<VisualStudioProject
	ProjectType="Visual C++"
	Version="7.10"
	Name="02-03 Dreieck"
	ProjectGUID="{A45D29BA-DF0E-462F-8888-68FD66C7FEC4}"
	SccProjectName=""
	SccLocalPath="">
	<Platforms>
		<Platform
			Name="Win32"/>
	</Platforms>
	<Configurations>
		<Configuration
			Name="Debug|Win32"
			OutputDirectory=".\Debug"
			IntermediateDirectory=".\Debug"
			ConfigurationType="1"
			UseOfMFC="0"
			ATLMinimizesCRunTimeLibraryUsage="FALSE"
			CharacterSet="2">
			<Tool
				Name="VCCLCompilerTool"
				Optimization="0"
				PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS"
				BasicRuntimeChecks="3"
				RuntimeLibrary="5"
				UsePrecompiledHeader="2"
				PrecompiledHeaderFile=".\Debug/Dreieck.pch"
				AssemblerListingLocation=".\Debug/"
				ObjectFile=".\Debug/"
				ProgramDataBaseFileName=".\Debug/"
				WarningLevel="3"
				SuppressStartupBanner="TRUE"
				DebugInformationFormat="4"/>
			<Tool
				Name="VCCustomBuildTool"/>
			<Tool
				Name="VCLinkerTool"
				AdditionalOptions="/MACHINE:I386"
				AdditionalDependencies="tribased.lib d3d9.lib dxerr9.lib odbc32.lib odbccp32.lib"
				OutputFile=".\Debug/Dreieck.exe"
				LinkIncremental="2"
				SuppressStartupBanner="TRUE"
				GenerateDebugInformation="TRUE"
				ProgramDatabaseFile=".\Debug/Dreieck.pdb"
				SubSystem="2"/>
			<Tool
				Name="VCMIDLTool"
				PreprocessorDefinitions="_DEBUG"
				MkTypLibCompatible="TRUE"
				SuppressStartupBanner="TRUE"
				TargetEnvironment="1"
				TypeLibraryName=".\Debug/Dreieck.tlb"/>
			<Tool
				Name="VCPostBuildEventTool"
				CommandLine="COPY &quot;$(TargetPath)&quot; .\"/>
			<Tool
				Name="VCPreBuildEventTool"/>
			<Tool
				Name="VCPreLinkEventTool"/>
			<Tool
				Name="VCResourceCompilerTool"
				PreprocessorDefinitions="_DEBUG"
				Culture="1031"/>
			<Tool
				Name="VCWebServiceProxyGeneratorTool"/>
			<Tool
				Name="VCXMLDataGeneratorTool"/>
			<Tool
				Name="VCWebDeploymentTool"/>
			<Tool
				Name="VCManagedWrapperGeneratorTool"/>
			<Tool
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
		</Configuration>
		<Configuration
			Name="Release|Win32"
			OutputDirectory=".\Release"
			IntermediateDirectory=".\Release"
			ConfigurationType="1"
			UseOfMFC="0"
			ATLMinimizesCRunTimeLibraryUsage="FALSE"
			CharacterSet="2">
			<Tool
				Name="VCCLCompilerTool"
				InlineFunctionExpansion="1"
				PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS"
				StringPooling="TRUE"
				RuntimeLibrary="4"
				EnableFunctionLevelLinking="TRUE"
				UsePrecompiledHeader="2"
				PrecompiledHeaderFile=".\Release/Dreieck.pch"
				AssemblerListingLocation=".\Release/"
				ObjectFile=".\Release/"
				ProgramDataBaseFileName=".\Release/"
				WarningLevel="3"
				SuppressStartupBanner="TRUE"/>
			<Tool
				Name="VCCustomBuildTool"/>
			<Tool
				Name="VCLinkerTool"
				AdditionalOptions="/MACHINE:I386"
				AdditionalDependencies="tribase.lib d3d9.lib dxerr9.lib odbc32.lib odbccp32.lib"
				OutputFile=".\Release/Dreieck.exe"
				LinkIncremental="1"
				SuppressStartupBanner="TRUE"
				ProgramDatabaseFile=".\Release/Dreieck.pdb"
				SubSystem="2"/>
			<Tool
				Name="VCMIDLTool"
				PreprocessorDefinitions="NDEBUG"
				MkTypLibCompatible="TRUE"
				SuppressStartupBanner="TRUE"
				TargetEnvironment="1"
				TypeLibraryName=".\Release/Dreieck.tlb"/>
			<Tool
				Name="VCPostBuildEventTool"
				CommandLine="COPY &quot;$(TargetPath)&quot; .\"/>
			<Tool
				Name="VCPreBuildEventTool"/>
			<Tool
				Name="VCPreLinkEventTool"/>
			<Tool
				Name="VCResourceCompilerTool"
				PreprocessorDefinitions="NDEBUG"
				Culture="1031"/>
			<Tool
				Name="VCWebServiceProxyGeneratorTool"/>
			<Tool
				Name="VCXMLDataGeneratorTool"/>
			<Tool
				Name="VCWebDeploymentTool"/>
			<Tool
				Name="VCManagedWrapperGeneratorTool"/>
			<Tool
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
		</Configuration>
	</Configurations>
	<References>
	</References>
	<Files>
		<Filter
			Name="Quellcodedateien"
			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
			<File
				RelativePath="..\..\Allgemeines\Direct3DEnum.cpp">
			</File>
			<File
				RelativePath=".\Dreieck.cpp">
			</File>
			<File
				RelativePath="..\..\Allgemeines\InitDirect3D.cpp">
			</File>
			<File
				RelativePath="..\..\Allgemeines\InitWindow.cpp">
			</File>
		</Filter>
		<Filter
			Name="Header-Dateien"
			Filter="h;hpp;hxx;hm;inl">
			<File
				RelativePath="..\..\Allgemeines\Allgemeines.h">
			</File>
			<File
				RelativePath="..\..\Allgemeines\Direct3DEnum.h">
			</File>
			<File
				RelativePath="..\..\Allgemeines\InitDirect3D.h">
			</File>
			<File
				RelativePath="..\..\Allgemeines\InitWindow.h">
			</File>
			<File
				RelativePath=".\resource.h">
			</File>
		</Filter>
		<Filter
			Name="Ressourcendateien"
			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
			<File
				RelativePath=".\Dreieck.rc">
			</File>
			<File
				RelativePath=".\Icon1.ico">
			</File>
		</Filter>
	</Files>
	<Globals>
	</Globals>
</VisualStudioProject>
```


----------



## deepthroat (14. August 2009)

anfängerregnäfna hat gesagt.:


> Code::Blocks verwendet MinGW


Nein, deins nicht. Fehlermeldungen sind vom Microsoft Compiler.


anfängerregnäfna hat gesagt.:


> Eine Einstellung "full command line" habe ich weder bei code:.blocks noch bei vc++2008 gefunden.


In meinem engl. ist es Settings->Compiler and debugger...

Dann den Compiler auswählen für den die Einstellungen geändert werden sollen, bei den Tabs im rechten Bereich "Other settings" auswählen. Dort die Einstellung Compiler logging ändern.


anfängerregnäfna hat gesagt.:


> Die Bibliothek wurde (im Quellcode) in beiden Dateien angegeben(Debug/Release)


Wie? Zeigen.
\edit:





anfängerregnäfna hat gesagt.:


> Im Anhang müsste sich die .vcproj Datei vom Beispielprogramm aus dem Buch befinden (als .txt) ,da ich noch nicht sehr viel Erfaahrung mit diesem Forum habe schreibe ich sie noch einmal als Code


Warum die Datei aus dem Buch? Die funktioniert doch.  In deiner Datei stimmt irgendwas nicht. Und es reicht wenn du die Datei als .txt anhängst.

Gruß


----------



## anfängerregnäfna (14. August 2009)

nun habe ich "full command line" angegeben
Als Compiler müsste MinGW verwendet werden

Ich habe auch probiert einfach die Datei aus dem Buch zu kompilieren um zu überprüfen, ob es am Quellcode, oder am Compiler liegt. Auch bei dem Beispielprogramm trat der Fehler auf.

Bei meinem Programm konnte ich keine .vcproj Datei finden

Hier die Einbindung der Engine und das Build Log:
Build Log:

```
-------------- Build: Debug in dreieck ---------------

Linking console executable: bin\Debug\dreieck.exe
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class tbColor & __thiscall tbColor::operator=(class tbColor const &)" (__imp_4tbColor@@QAEAAV0@ABV0@@Z) referenced in function _WinMain@16
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall tbColor::tbColor(float,float,float)" (__imp_0tbColor@@QAE@MMM@Z) referenced in function _WinMain@16
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class tbVector3 & __thiscall tbVector3::operator=(class tbVector3 const &)" (__imp_4tbVector3@@QAEAAV0@ABV0@@Z) referenced in function _WinMain@16
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall tbVector3::tbVector3(float,float,float)" (__imp_0tbVector3@@QAE@MMM@Z) referenced in function _WinMain@16
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall tbColor::tbColor(void)" (__imp_0tbColor@@QAE@XZ) referenced in function "public: __thiscall SVertex::SVertex(void)" (0SVertex@@QAE@XZ)
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall tbVector3::tbVector3(void)" (__imp_0tbVector3@@QAE@XZ) referenced in function "public: __thiscall SVertex::SVertex(void)" (0SVertex@@QAE@XZ)
bin\Debug\dreieck.exe : fatal error LNK1120: 6 unresolved externals
Process terminated with status 1120 (0 minutes, 0 seconds)
7 errors, 0 warnings
```

Einbindung der Engine:

```
#include <d3d9.h>
#include <d3dx9.h>
#include <TriBase.h>
#include <windows.h>
```


----------



## deepthroat (14. August 2009)

anfängerregnäfna hat gesagt.:


> nun habe ich "full command line" angegeben


Bei welchem Compiler?


anfängerregnäfna hat gesagt.:


> Als Compiler müsste MinGW verwendet werden


Müßte, wird aber nicht. Die Fehlermeldungen sind immer noch vom Microsoft Compiler. Rechtsklick auf's Projekt->Build Optionen... Dort das obere Projekt im Baum links auswählen, Selected Compiler auf GNU GCC stellen.


anfängerregnäfna hat gesagt.:


> Ich habe auch probiert einfach die Datei aus dem Buch zu kompilieren um zu überprüfen, ob es am Quellcode, oder am Compiler liegt. Auch bei dem Beispielprogramm trat der Fehler auf.


Und das Projekt wurde korrekt konvertiert vom Visual Studio?


anfängerregnäfna hat gesagt.:


> Bei meinem Programm konnte ich keine .vcproj Datei finden





anfängerregnäfna hat gesagt.:


> Einbindung der Engine:
> 
> ```
> #include <d3d9.h>
> ...


Red ich Suaheli? Ich spreche von der Bibliothek, der .lib Datei, nicht von den Headerdateien.

Gruß


----------



## anfängerregnäfna (14. August 2009)

Ich habe unter Build Options den GNU GCC Compiler angegeben (bwi Code::Blocks) und in die Search Directories die Pfade zu MinGW include und bin eingefügt.
Dann habe ich versucht den .lib Pfad auch in die Link Libraries einzufügen, dass funktionierte nur eingeschränkt. statt einem Pfad musste ich alle Unterverzeichnisse mitverlinken.
Ich hoffte nun MinGW korrekt eingestellt zu haben doch als ich versucht das Programm zu kompilieren, gab CodeBlocks folgenden Fehler aus:

```
"dreieck - Debug" uses an invalid compiler. Skipping...
Nothing to be done.
```
Die anweisung full command line habe ich bei MinGW angegeben. ZUmiindest glaube ich das, denn langsam verliere ich etwas den Überblick.
Die engine habe ich Code::Blocks so angegeben:
Link Libraries:

```
..\..\..\..\..\Programme\TriBase\Lib\TriBaseD.lib
..\..\..\..\..\Programme\TriBase\Lib\TriBase.lib
..\..\..\..\..\Programme\TriBase\Lib\StrmIIDs.lib
..\..\..\..\..\Programme\TriBase\Lib\StrmBaseD.lib
..\..\..\..\..\Programme\TriBase\Lib\StrmBase.lib
```
Search Directories:
Compiler:

```
..\..\..\..\..\Programme\TriBase\Include
```
Linker:

```
..\..\..\..\..\Programme\TriBase\Lib
```
Nun zu deiner letzten Frage:
Das Projekt wurde korrekt konvertiert


----------



## deepthroat (14. August 2009)

anfängerregnäfna hat gesagt.:


> Ich habe unter Build Options den GNU GCC Compiler angegeben (bwi Code::Blocks) und in die Search Directories die Pfade zu MinGW include und bin eingefügt.


Das bin Verzeichnis ist unsinnig, da sind Binaries drin. Das include Verzeichnis findet MinGW selbst, dürfte aber nichts ausmachen wenn man es trotzdem noch eingibt.


anfängerregnäfna hat gesagt.:


> Dann habe ich versucht den .lib Pfad auch in die Link Libraries einzufügen


Den Pfad? Wieso denn das? Der Pfad sollte in die Search Directories->Linker Liste aufgenommen werden. Die Bibliothek dann einfach als "TriBaseD.lib" für das Debug, und als "TriBase.lib" in die Linker Settings unter "*Other linker options*" eintragen.


anfängerregnäfna hat gesagt.:


> dass funktionierte nur eingeschränkt. statt einem Pfad musste ich alle Unterverzeichnisse mitverlinken.


Was meinst du damit?


anfängerregnäfna hat gesagt.:


> Ich hoffte nun MinGW korrekt eingestellt zu haben doch als ich versucht das Programm zu kompilieren, gab CodeBlocks folgenden Fehler aus:
> 
> ```
> "dreieck - Debug" uses an invalid compiler. Skipping...
> ...


Wie sehen die Einstellungen in Settings->Compiler and debugger... : GNU GCC Compiler -> Toolchain executables aus? (screenshot hier anhängen).


anfängerregnäfna hat gesagt.:


> Die engine habe ich Code::Blocks so angegeben:
> Link Libraries:
> 
> ```
> ...


Das ist falsch, du mußt entweder die Debug Version oder die Release Version der Bibliotheken nutzen. Siehe oben.

Gruß


----------



## Anfänger92 (14. August 2009)

Ähhm,

hab da nen bisschen den Überblick verloren...

benutzt du jetzt VC oder MinGW ? oder doch Beides?


----------



## anfängerregnäfna (14. August 2009)

@ Deepthroat Die fehlerhaften Einstellungen habe ich glaube ich behoben, vielen Dank für die guten Tipps.
Hier sind die Screenshots von allen Einstellungen die ich bei CodeBlocks vorgenommen habe. 

Hoffentlich lässt sich das Problem jetzt lösen

Um alle Fragen zu beantworten:
Ich benutze sowohl vc++2008 als auch Code::Blocks.
Beides funktioniert nicht.
Erst habe ich vc++ toolkit 2003 als Compiler verwendet, bin aber auf MinGW umgestiegen.
Die letzten paar Tips sollten Code::Blocks zum Laufen bringen.


----------



## deepthroat (14. August 2009)

anfängerregnäfna hat gesagt.:


> Hier sind die Screenshots von allen Einstellungen die ich bei CodeBlocks vorgenommen habe.


Wo denn? Hab ich was verpasst?


----------



## anfängerregnäfna (14. August 2009)

oh, keine Ahnung, warum die nicht angehängt wurden, hatte sie hochgeladen.
Also noch einmal

Oh wieder nicht. Also noch einmal.






























Mein Fehler. Der zweite Versuch hatte doch funktioniert, also war der Dritte überflüssig.

Sollte ein Moderator dies lesen: Falls sie vorhaben eine Version der Bilder der Übersicht zugunsten zu löschen, so nehmen sie bitte die zweite, und nicht die Dritte.
Ich glaube die Qualität der Bilder der Dritten Version ist besser.


----------



## vfl_freak (14. August 2009)

Moin,

"TriBaseD.lib" ist *KEINE* "_Linker Option_", sondern eine Programmbibliothek  ! ! 

Trag sie mal links ein !

Gruß
Klaus


----------



## anfängerregnäfna (14. August 2009)

Geändert,
folgende Fehlermeldung
	
	
	



```
"dreieck - Debug" uses an invalid compiler. Skipping...
Nothing to be done.
```


----------



## Anfänger92 (14. August 2009)

Ich glaube bei der installation is einiges durcheinander gegangen. schmeiß mal beide compiler runter + alles was dazu gehört und installier vc.

Dann sollte alles gehen


----------



## anfängerregnäfna (14. August 2009)

@Anfänger92 ich habe Stunden damit verbracht, Code::Blocks zum Laufen zu bringen. Ich hatte zwar keinen Erfolg, aber alles zu deinstallieren halte ich für eine schlechte Lösung. Erstens funktioniert auch vc++2008 bisher nicht. Zweitens schaffen es ja auch andere Leute mit Code::Blocks zu programmieren.


----------



## Anfänger92 (14. August 2009)

Hi,

naja wenn man die meldung bekommt, das der Compiler falsch ist dann ist da i-wo was ziemlich schief gelaufen.

Normaler weise dauert es nach der installation max. 5 Minuten um z.B. VC++ so einzustellen das alles Funktioniert. 

Aber naja


----------



## anfängerregnäfna (15. August 2009)

Was programmierst du mit vc++2008?
 Benutzt du auch DirectX?
Wie hast du vc++2008 eingestellt?

Ich habe versucht vc++2008 zu konfigurieren.
Folgender Quellcode:

```
#include <d3d9.h>
#include <d3dx9.h>
#include <TriBase.h>
#include <windows.h>


PDIRECT3D9 g_pd3d=0;
PDIRECT3DDEVICE9 g_pd3ddev=0;
int g_width=1000;
int g_height=1000;
HWND hwnd;               /* This is the handle for our window */
MSG messages;
int g_anzdreiecke=1;
struct SVertex
{tbVector3 vPosition;
tbColor dwColor;
};
SVertex g_tv[3];

init(HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow);
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
void initdx();
void Render();
void Move();
int WINAPI WinMain(HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
init(hThisInstance,hPrevInstance,lpszArgument,nCmdShow);
initdx();
g_pd3ddev->SetRenderState(D3DRS_LIGHTING,FALSE);
g_pd3ddev->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);
g_pd3ddev->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
g_pd3ddev->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
g_pd3ddev->SetRenderState(D3DRS_ZENABLE,TRUE);
g_pd3ddev->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE);
g_tv[0].vPosition=tbVector3(1.0f,1.0f,1.0f);
g_tv[1].vPosition=tbVector3(2.0f,1.0f,1.0f);
g_tv[2].vPosition=tbVector3(1.5f,2.0f,1.0f);
g_tv[0].dwColor=tbColor(1.0f,0.0f,0.0f);
g_tv[1].dwColor=tbColor(1.0f,0.0f,0.0f);
g_tv[2].dwColor=tbColor(1.0f,0.0f,0.0f);
tbMatrix w(tbMatrixTranslation(tbVector3(1.0f,1.0f,1.0f)));
g_pd3ddev->SetTransform((D3DTS_WORLD),(D3DMATRIX*)(&w));
tbMatrix v(tbMatrixProjection(100.0f,1.5f,0.0f,100.0f));
g_pd3ddev->SetTransform(D3DTS_PROJECTION,(D3DMATRIX*)(&v));
while(messages.message!=WM_QUIT){
while(PeekMessage(&messages,NULL,0,0,PM_REMOVE))
{TranslateMessage(&messages);
DispatchMessage(&messages);}
Render();
Move();
}
return 0;
}
init(HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
	WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName =(LPCWSTR) "szClassName";
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default colour as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           (LPCWSTR)"szClassName",         /* Classname */
           (LPCWSTR)"Code::Blocks Template Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           g_width,                 /* The programs width */
           g_height,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );
ShowWindow (hwnd, nCmdShow);
return 0;};
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
void Render()
{
g_pd3ddev->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(200,200,200),1.0,(DWORD)0.0f);
g_pd3ddev->BeginScene();
g_pd3ddev->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1,g_tv,sizeof(g_tv));
g_pd3ddev->EndScene();
g_pd3ddev->Present(NULL,NULL,NULL,NULL);
};
void Move(){};
void initdx()
{
g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);
D3DDISPLAYMODE d;
g_pd3d->GetAdapterDisplayMode(0,&d);
D3DPRESENT_PARAMETERS pParam;
ZeroMemory(&pParam,sizeof(pParam));
pParam.BackBufferWidth=d.Width;
pParam.BackBufferHeight=d.Height;
pParam.BackBufferFormat=d.Format;
pParam.BackBufferCount=1;
pParam.MultiSampleType=D3DMULTISAMPLE_NONE;
//pParam.MultiSampleQuality=1;
pParam.SwapEffect=D3DSWAPEFFECT_COPY;
pParam.hDeviceWindow=hwnd;
pParam.Windowed=TRUE;
pParam.EnableAutoDepthStencil=false;
//pParam.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
pParam.FullScreen_RefreshRateInHz=d.RefreshRate;
pParam.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
g_pd3d->CreateDevice(0,D3DDEVTYPE_HAL,hwnd,D3DCREATE_MIXED_VERTEXPROCESSING,&pParam,&g_pd3ddev);
};
```
Folgende Fehlermeldung:

```
Buildprotokoll     Erstellen wurde gestartet: Projekt: "dreick", Konfiguration: "Debug|Win32"
 Befehlszeilen     Die temporäre Datei "c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\RSP00000740002456.rsp" wird erstellt. Inhalt:
[
/Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /c /ZI /TP ".\khtd.cpp"
]Erstellen der Befehlszeile "cl.exe @"c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\RSP00000740002456.rsp" /nologo /errorReport:prompt" Ausgabefenster     Kompilieren...
khtd.cpp
c:\dokumente und einstellungen\martin klein\eigene dateien\visual studio 2008\projects\dreick\dreick\khtd.cpp(23) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
c:\dokumente und einstellungen\martin klein\eigene dateien\visual studio 2008\projects\dreick\dreick\khtd.cpp(64) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
 Ergebnisse     Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\BuildLog.htm" gespeichert.
dreick - 2 Fehler, 0 Warnung(en)
```
Warum erkeent vc++2008 nicht, dass ich int als Typ angegeben habe?
Ich hänge den Quellcode zur Übersicht noch als .txt an

Anhang anzeigen quellcode.txt


----------



## Anfänger92 (15. August 2009)

Hallo,


```
init(HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
```
Dort fehlt der Rückgabe Typ der Funktion.
So muss es aussehen (oder ähnlich)

```
int init(HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
```

Gruß
Anfänger

Edit:
Und ja ich habe VC++ benutzt jetzte aber VS (also die Full).
Habe das Buch auch.
Und Programmiere Hauptsächlich 3D-Anwendungen mit DX.


----------



## Maik (15. August 2009)

anfängerregnäfna hat gesagt.:


> Sollte ein Moderator dies lesen: Falls sie vorhaben eine Version der Bilder der Übersicht zugunsten zu löschen, so nehmen sie bitte die zweite, und nicht die Dritte.
> Ich glaube die Qualität der Bilder der Dritten Version ist besser.


Dürfte so passen, oder?

Und nutze bitte zukünftig in deinen Beiträgen unten rechts den "Ändern"-Button, wenn du noch etwas hinzufügen bzw. nachreichen willst, anstatt in den Themen im Minutentakt neue Beiträge zu verfassen - vielen Dank!

Ich hab da mal in diesem und einem weiteren Thema für Ordnung gesorgt, und deine einzelnen Doppel-/Dreifachposts zusammengetackert. Also nicht wundern, weshalb deine Beitragszahl von 36 auf 28 gesunken ist.

mfg Maik


----------



## anfängerregnäfna (15. August 2009)

Ich habe vc++2008 konfiguriert (Platform SDK DirectX und TriBase Engine angegeben)
Nachdem ich die Fehler mit den Rückgabewerten behoben hatte, habe ich im Menu "erstellen" Kompilieren gewählt

```
------ Erstellen gestartet: Projekt: dreick, Konfiguration: Debug Win32 ------
Kompilieren...
Überspringen... (keine relevanten Änderungen gefunden)
khtd.cpp
Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\BuildLog.htm" gespeichert.
dreick - 0 Fehler, 0 Warnung(en)
========== Erstellen: 1 erfolgreich, Fehler bei 0, 0 aktuell, 0 übersprungen ==========
```
Nachdem ich das Build Protokoll gelesen hatte, war ich sehr erleichtert, ABER:
Nun wollte ich das Programm ausführen und habe auf den grünen Startpfeil geklickt, für Debugging starten.
Das Projekt wurde erneut kompiliert, aber dieses Mal sah das Build Protokoll nicht so gut aus:

```
Buildprotokoll     Erstellen wurde gestartet: Projekt: "dreick", Konfiguration: "Debug|Win32"
 Befehlszeilen     Die temporäre Datei "c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\RSP00000527441540.rsp" wird erstellt. Inhalt:
[
/OUT:"C:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\Debug\dreick.exe" /INCREMENTAL /MANIFEST /MANIFESTFILE:"Debug\dreick.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\Debug\dreick.pdb" /SUBSYSTEM:WINDOWS /DYNAMICBASE /NXCOMPAT /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

".\Debug\khtd.obj"

".\Debug\dreick.exe.embed.manifest.res"
]Erstellen der Befehlszeile "link.exe @"c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\RSP00000527441540.rsp" /NOLOGO /ERRORREPORT:PROMPT" Ausgabefenster     Verknüpfen...
khtd.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) class tbMatrix __cdecl tbMatrixProjection(float,float,float,float)" (__imp_?tbMatrixProjection@@YA?AVtbMatrix@@MMMM@Z)" in Funktion "_WinMain@16".
khtd.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) class tbMatrix __cdecl tbMatrixTranslation(class tbVector3 const &)" (__imp_?tbMatrixTranslation@@YA?AVtbMatrix@@ABVtbVector3@@@Z)" in Funktion "_WinMain@16".
khtd.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: class tbColor & __thiscall tbColor::operator=(class tbColor const &)" (__imp_4tbColor@@QAEAAV0@ABV0@@Z)" in Funktion "_WinMain@16".
khtd.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall tbColor::tbColor(float,float,float)" (__imp_0tbColor@@QAE@MMM@Z)" in Funktion "_WinMain@16".
khtd.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: class tbVector3 & __thiscall tbVector3::operator=(class tbVector3 const &)" (__imp_4tbVector3@@QAEAAV0@ABV0@@Z)" in Funktion "_WinMain@16".
khtd.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall tbVector3::tbVector3(float,float,float)" (__imp_0tbVector3@@QAE@MMM@Z)" in Funktion "_WinMain@16".
khtd.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Direct3DCreate9@4" in Funktion ""void __cdecl initdx(void)" (?initdx@@YAXXZ)".
khtd.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall tbColor::tbColor(void)" (__imp_0tbColor@@QAE@XZ)" in Funktion ""public: __thiscall SVertex::SVertex(void)" (0SVertex@@QAE@XZ)".
khtd.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall tbVector3::tbVector3(void)" (__imp_0tbVector3@@QAE@XZ)" in Funktion ""public: __thiscall SVertex::SVertex(void)" (0SVertex@@QAE@XZ)".
C:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\Debug\dreick.exe : fatal error LNK1120: 9 nicht aufgelöste externe Verweise.
 Ergebnisse     Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\dreick\Debug\BuildLog.htm" gespeichert.
dreick - 10 Fehler, 0 Warnung(en)
```
Was habe ich falsch gemacht. Ich weiß nicht mehr weiter.
Mein "verbesserter" Quellcode liegt im Anhang.
Anhang anzeigen quellcode.txt


----------



## Anfänger92 (15. August 2009)

Hi,

du musst die lib's noch deinem Projekt hinzufügen.

Am einfachsten geht das so:


```
#ifdef _DEBUG

//Alle Debug-Librarys linken
#pragma comment (lib, "TriBaseD.lib")
#pragma comment (lib, "D3D9D.lib")

#else

//Alle Release-Librarys linken
#pragma comment(lib, "TriBase.lib")
#pragma comment (lib, "D3D9.lib")

#endif
```
Das sollte als erstes in deinem Code stehen


Du kanst das ganze auch über ein Menü machen:
Rechtsklick auf dein Projekt -> Eigenschaften.
Links auf Konfiguration -> Linker -> Eingabe.
Und dann bei "Zusätzliche abhängigkeiten ale libs eintragen.
Bei dir sollte dann das da stehen:
TriBaseD.lib D3D9.lib

*Aber Bitte:*
Entscheide dich für eine möglichkeit nicht für beide 

Gruß Anfänger


----------



## anfängerregnäfna (15. August 2009)

Habe deine Ratschläge befolgt. Nun lässt sich das Projekt erstellen. Vielen Dank.
ABER: Beim Starten kommt folgendes Nachrichtenfenster:
"Die Anwendung konnte nicht gestartet werden, weil TriBase.dll nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben"


----------



## Anfänger92 (15. August 2009)

Ja.

Also du musst die TriBaseD.dll bzw TriBase.dll in das Debug Verzeichnis deiner Projektes kopieren.
Also dahin wo auch die .exe deines Projekts liegt.
In diesem Fall hier hin:
c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\debug

Ist leider sehr umständlich aber der einzige Weg den ich kenn.

Noch ein Tipp:
Wenn du das ganze als Release erstellst müssen die entsprechenden DLL's natürlich nicht im "Debug" Verzeichnis liegen sondern im "Release" Verzeichnis.

Jetzt sollte alles gehen.

Viel Spaß mit dem Buch


----------



## anfängerregnäfna (15. August 2009)

Die Dateien wurden in den Debug Ordner kopiert. Nun lautet die Fehlermeldung wie folgt:
Die Anwendung konnte nicht gestartet werden, weil d3dx9d_30.dll nicht gefunden werden konnte.

Wo liegt diese Datei? Muss ich wirklich bei hedem neuen Projekt etliche Treiberdateien auf meiner Festplatte hin und her schieben und hoffen das ich zufällig alles richtig mache? Gibt es einen einfacheren Weg? Kann ich z.B. vc++2008 einmal angeben wo es Dateien suchen soll?

Bei Code::Blocks konnte man in einem Linker Verzeichnis Dateien wie kernel32, ole32,... angeben. Ich gehe davon aus, dass das auch Treiber waren. Gibt es eine äquivalente Option bei vc++2008?

Wie ist dein vc++2008 eingestellt, was machst du, wenn du ein neues Projekt erstellst?


----------



## Anfänger92 (15. August 2009)

Hi,

um diese Fehlermeldung zu umgehen sollte man das neuste DirectX SDK benutzen.

Warscheinlihc arbeitest du mit einem veralteten, und die Dll's dazu sind schon längst nicht mehr vorhanden.

Falls du das von der CD benutzt schleunigst weg damit !!

Das ist mehrere Jahre alt.

Falls du das neue SDK schon drauf hast erstell die TriBase.dll mal neu. Diese ruft auch die veralteten dll's auf.

Natürlich muss man nicht alle Treiberdaten immer kopieren.
Wenn sich diese im Windows Verzeichnis befinden werden sie automatisch geladen.

Aber ich denke nich das es eine gute Idee ist den Windows Ordner mit sämtlichen Dll vollzupacken.

Gruß
Anfänger

PS:
Wenn dir das zu umständlich ist, suche mal bei Google nach der DLL ich bin sicher du wirst schnell fündig.
Falls nicht kanst du auch einfach eine neuere umbennen. Das Hat bei mir früher auch immer Funktioniert *g*


----------



## anfängerregnäfna (15. August 2009)

Wie kann ich TriBase.dll neu erstellen?

ich benutze bereits das neueste DirectX SDK


----------



## Anfänger92 (15. August 2009)

Ja dann musst du die TriBase neu ertsllen.

Du Kopierst den Ordner von der CD (hast du ja warscheinlich schon gemacht) und öffnest das Projekt. Dann einfach rechtsklick auf das Project->erstellen.

Gruß
Anfänger

PS:
Falls es nicht klappt kann ich sie dir auch gleich nochmal erstellen.


----------



## anfängerregnäfna (15. August 2009)

Ich habe die Datei Tribase 2005 aus der CD in vc++2008 gestartet und erstellt,
dann habe ich die Datei TriBaseD.dll in mein Projekt kopiert. Das Projekt lässt sich problemlos starten. Vielen Dank.
Ich weiß nicht, ob du alle Beiträge gelesen hast, am Anfang konnte ich das Projekt auch in Code::Blocks noch starten, es stürzte nur immer ab. Dann war auf einmal die Kompilierung mit Code::Blocks unmöglich. Nun kann ich das Projekt mit vc++2008 erstellen, doch abstürzen tut es auch hier. Es scheint sich um einen Nullzeiger zu handeln. Irgendwo im folgenden Code steckt wahrscheinlich der Fehler, denn bei der ersten Benutzung von g_pd3ddev stürzt das Programm ab:

```
void initdx()
{
g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);
D3DDISPLAYMODE d;
g_pd3d->GetAdapterDisplayMode(0,&d);
D3DPRESENT_PARAMETERS pParam;
ZeroMemory(&pParam,sizeof(pParam));
pParam.BackBufferWidth=d.Width;
pParam.BackBufferHeight=d.Height;
pParam.BackBufferFormat=d.Format;
pParam.BackBufferCount=1;
pParam.MultiSampleType=D3DMULTISAMPLE_NONE;
//pParam.MultiSampleQuality=1;
pParam.SwapEffect=D3DSWAPEFFECT_COPY;
pParam.hDeviceWindow=hwnd;
pParam.Windowed=TRUE;
pParam.EnableAutoDepthStencil=false;
//pParam.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
pParam.FullScreen_RefreshRateInHz=d.RefreshRate;
pParam.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
g_pd3d->CreateDevice(0,D3DDEVTYPE_HAL,hwnd,D3DCREATE_MIXED_VERTEXPROCESSING,&pParam,&g_pd3ddev);
};
```

Hier noch die Ausgabe:

```
"dreick.exe": "C:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\Debug\dreick.exe" geladen, Symbole wurden geladen.
"dreick.exe": "C:\WINDOWS\system32\ntdll.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\kernel32.dll" wurde geladen
"dreick.exe": "C:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\Debug\TriBaseD.dll" geladen, Symbole wurden geladen.
"dreick.exe": "C:\WINDOWS\system32\d3d9.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\d3d8thk.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\gdi32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\user32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\msvcrt.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\advapi32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\rpcrt4.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\secur32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\version.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\winmm.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\D3dx9d_41.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\dinput8.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\dsound.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\ole32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\comdlg32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\shlwapi.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\comctl32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\shell32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\oleaut32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcr90d.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\uxtheme.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\msctf.dll" wurde geladen
Eine Ausnahme (erste Chance) bei 0x00411579 in dreick.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Unbehandelte Ausnahme bei 0x00411579 in dreick.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Eine Ausnahme (erste Chance) bei 0x00411579 in dreick.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Unbehandelte Ausnahme bei 0x00411579 in dreick.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Eine Ausnahme (erste Chance) bei 0x00411579 in dreick.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Unbehandelte Ausnahme bei 0x00411579 in dreick.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Das Programm "[1348] dreick.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.
```


----------



## Maik (15. August 2009)

@anfängerregnäfna: Hast du meinen Beitrag von heute Morgen nicht gelesen? 



Maik hat gesagt.:


> Und nutze bitte zukünftig in deinen Beiträgen unten rechts den "Ändern"-Button, wenn du noch etwas hinzufügen bzw. nachreichen willst, anstatt in den Themen im Minutentakt neue Beiträge zu verfassen - vielen Dank!


Hab hier erneut deine Doppelposts zusammenführen dürfen 

mfg Maik


----------



## Anfänger92 (15. August 2009)

Hi,

Also:

Teste mal auf Fehler das macht die Sache einfacher:

```
{
    g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);
    if(!g_pd3d) {
        MessageBoxA(NULL,"Can not create Direct3D Interface!","Error",MB_OK)
        return FALSE;
    }
    D3DDISPLAYMODE d;
    g_pd3d->GetAdapterDisplayMode(0,&d);
    D3DPRESENT_PARAMETERS pParam;
    ZeroMemory(&pParam,sizeof(pParam));
    pParam.BackBufferWidth=d.Width;
    pParam.BackBufferHeight=d.Height;
    pParam.BackBufferFormat=d.Format;
    pParam.BackBufferCount=1;
    pParam.MultiSampleType=D3DMULTISAMPLE_NONE;
    //pParam.MultiSampleQuality=1;
    pParam.SwapEffect=D3DSWAPEFFECT_COPY;
    pParam.hDeviceWindow=hwnd;
    pParam.Windowed=TRUE;
    pParam.EnableAutoDepthStencil=false;
    //pParam.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
    pParam.FullScreen_RefreshRateInHz=d.RefreshRate;
    pParam.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
    if(FAILED(g_pd3d->CreateDevice(0,D3DDEVTYPE_HAL,hwnd,D3DCREATE_MIXED_VERTEXPROCESSING,&pParam,&g_pd3ddev)))
    {
        MessageBoxA(NULL,"Can not create Direct3DDevice Interface!","Error",MB_OK)
        return FALSE;
    }
};
```

Damit lässt sich der Fehler schonmal begrenzen.
Ich denke mal es liegt an den "Einstellungen" in D3DPRESENT_PARAMETERS.

Gruß
Anfänger


----------



## anfängerregnäfna (15. August 2009)

Es war nicht möglich das Direct3DDevice Interface zu erstellen. Du hast wahrscheinlich recht mit der PParams Struktur


----------



## Anfänger92 (16. August 2009)

Hi,

benutze mal D3DSWAPEFFECT_DISCARD anstatt D3DSWAPEFFECT_COPY.

Und statt D3DPRESENT_INTERVAL_DEFAULT, D3DPRESENT_INTERVAL_ONCE.

Außderm teste mal ob das Fenster hwnd gültig / bzw erstellt ist.

Gruß
Anfänger


----------



## anfängerregnäfna (16. August 2009)

Ich habe die Angaben in der D3DPRESENT PARAMETERS Struktur geändert und überprüft, ob hwnd=0 ist. hwnd ist gültig, aber der Fehler taucht immer noch auf.
Hier die Erstellund der IDirect3DDevice-Schnittstelle

```
bool initdx()
{
    g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);
    if(!g_pd3d) {
        MessageBoxA(NULL,"Can not create Direct3D Interface!","Error",MB_OK);
        return FALSE;
    }
    D3DDISPLAYMODE d;
    g_pd3d->GetAdapterDisplayMode(0,&d);
    D3DPRESENT_PARAMETERS pParam;
    ZeroMemory(&pParam,sizeof(pParam));
    pParam.BackBufferWidth=d.Width;
    pParam.BackBufferHeight=d.Height;
    pParam.BackBufferFormat=d.Format;
    pParam.BackBufferCount=1;
    pParam.MultiSampleType=D3DMULTISAMPLE_NONE;
    pParam.MultiSampleQuality=NULL;
    pParam.SwapEffect=D3DSWAPEFFECT_DISCARD;
    pParam.hDeviceWindow=hwnd;
    pParam.Windowed=TRUE;
    pParam.EnableAutoDepthStencil=false;
    pParam.Flags=NULL;
    pParam.FullScreen_RefreshRateInHz=d.RefreshRate;
    pParam.PresentationInterval=D3DPRESENT_INTERVAL_ONE;
    if(FAILED(g_pd3d->CreateDevice(0,D3DDEVTYPE_HAL,hwnd,D3DCREATE_MIXED_VERTEXPROCESSING,&pParam,&g_pd3ddev)))
    {
        MessageBoxA(NULL,"Can not create Direct3DDevice Interface!","Error",MB_OK);
        return FALSE;
    }
};
```


----------



## Anfänger92 (16. August 2009)

Hi,

Ich glaub ich habn es

Setze mal RefreshRate auf "D3DPRESENT_RATE_DEFAULT".

eine eigene Refresh rate, also was anderes als D3DPRESENT_RATE_DEFAULT kannst du nur benutzen wenn du mit Full-Screen arbeitest 

Achja.
Und wenn du C++ Code einfügst benutze statt  "CODE" "/CODE" mal "CPP" "/CPP".
Dadürch wird es noch etwas übersichtlicher.

Gruß
Anfänger


----------



## anfängerregnäfna (20. August 2009)

Hallo,
konnte leider lange nicht mehr schreiben. Die Ferien waren vorbei und der Alltag hat wieder angefangen. Ich hatte viel zu tun. Außerdem nutze ich jetzt meinen Desktop Pc und nicht mehr den Laptop, der mit im Urlaub war. Ich habe versucht meinen Quellcode auf diesem Rechner zu erstellen und erhalte folgende Fehlermeldung:

```
Buildprotokoll     Erstellen wurde gestartet: Projekt: "dreieck", Konfiguration: "Debug|Win32"
 Befehlszeilen     Die temporäre Datei "c:\Users\lars\Documents\Visual Studio 2008\Projects\dreieck\dreieck\Debug\RSP00000C8644596.rsp" wird erstellt. Inhalt:
[
/Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Yu"stdafx.h" /Fp"Debug\dreieck.pch" /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /c /ZI /TP ".\Main.cpp"
]Erstellen der Befehlszeile "cl.exe @"c:\Users\lars\Documents\Visual Studio 2008\Projects\dreieck\dreieck\Debug\RSP00000C8644596.rsp" /nologo /errorReport:prompt" Ausgabefenster     Kompilieren...
Main.cpp
c:\users\lars\documents\visual studio 2008\projects\dreieck\dreieck\main.cpp(148) : fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?
 Ergebnisse     Das Buildprotokoll wurde unter "file://c:\Users\lars\Documents\Visual Studio 2008\Projects\dreieck\dreieck\Debug\BuildLog.htm" gespeichert.
dreieck - 1 Fehler, 0 Warnung(en)
```
Hier mein Code:


----------



## deepthroat (20. August 2009)

Hi.

Wie wär's wenn du einfach mal die Fehlermeldung liest? Die ist doch ziemlich eindeutig:



> Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?


Gruß

PS: Wenn dein Code so aussieht, ist es kein Wunder das du da nicht durchblickst. Rück deinen Code ordentlich ein, und lass entsprechend Platz dass nicht alles so aneinandergeklatscht ist.


----------



## anfängerregnäfna (21. August 2009)

Datei eingebunden.
Fehlermeldung:

```
Buildprotokoll     Erstellen wurde gestartet: Projekt: "dreieck", Konfiguration: "Debug|Win32"
 Befehlszeilen     Die temporäre Datei "c:\Users\lars\Documents\Visual Studio 2008\Projects\dreieck\dreieck\Debug\RSP00000247524184.rsp" wird erstellt. Inhalt:
[
/Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Yu"stdafx.h" /Fp"Debug\dreieck.pch" /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /c /ZI /TP ".\Main.cpp"
]Erstellen der Befehlszeile "cl.exe @"c:\Users\lars\Documents\Visual Studio 2008\Projects\dreieck\dreieck\Debug\RSP00000247524184.rsp" /nologo /errorReport:prompt" Ausgabefenster     Kompilieren...
Main.cpp
c:\users\lars\documents\visual studio 2008\projects\dreieck\dreieck\main.cpp(5) : fatal error C1083: Datei (vorkompilierte Headerdatei) kann nicht geöffnet werden: "Debug\dreieck.pch": No such file or directory
 Ergebnisse     Das Buildprotokoll wurde unter "file://c:\Users\lars\Documents\Visual Studio 2008\Projects\dreieck\dreieck\Debug\BuildLog.htm" gespeichert.
dreieck - 1 Fehler, 0 Warnung(en)
```


----------



## Anfänger92 (21. August 2009)

Hi,

Versuch mal nen Rebuild per Rechtsklick auf dien Projekt.

Kann es sein das du ne MFC Andwendung erstellt hast?

Ich musste noch nie stdafx.h includen, außer bei MFC.

Gruß
Anfänger


----------



## deepthroat (21. August 2009)

Du brauchst auch noch eine stdafx.cpp Datei die die vorkompilierte Headerdatei erzeugt.

Wenn du keine vorkompilierten Header verwenden willst, dann schalte diese einfach ab.

Gruß


----------



## anfängerregnäfna (24. August 2009)

Ich bin sehr verwirrt.
Rechtsklick auf Projekt, kompilieren -> Erfolg
Erstellen,Projektmappe erstellen ->Fehler
Ich habe das auf meinem Rechner neu angelegt, mit dem Namen dr(für Dreieck)
Hier die beiden Build Logs:
kompilieren...

```
Buildprotokoll     Erstellen wurde gestartet: Projekt: "dr", Konfiguration: "Debug|Win32"
 Befehlszeilen     Die temporäre Datei "c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\RSP00000730083952.rsp" wird erstellt. Inhalt:
[
/Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /c /ZI /TP ".\main.cpp"
]Erstellen der Befehlszeile "cl.exe @"c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\RSP00000730083952.rsp" /nologo /errorReport:prompt" Ausgabefenster     Kompilieren...
Überspringen... (keine relevanten Änderungen gefunden)
main.cpp
 Ergebnisse     Das Buildprotokoll wurde unter "file://c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\BuildLog.htm" gespeichert.
dr - 0 Fehler, 0 Warnung(en)
```
erstellen...

```
Buildprotokoll     Erstellen wurde gestartet: Projekt: "dr", Konfiguration: "Debug|Win32"
 Befehlszeilen     Die temporäre Datei "c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\RSP00000830084404.rsp" wird erstellt. Inhalt:
[
/OUT:"C:\Users\lars\Documents\Visual Studio 2008\Projects\dr\Debug\dr.exe" /INCREMENTAL /MANIFEST /MANIFESTFILE:"Debug\dr.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Users\lars\Documents\Visual Studio 2008\Projects\dr\Debug\dr.pdb" /SUBSYSTEM:WINDOWS /DYNAMICBASE /NXCOMPAT /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

".\Debug\main.obj"

".\Debug\dr.exe.embed.manifest.res"
]Erstellen der Befehlszeile "link.exe @"c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\RSP00000830084404.rsp" /NOLOGO /ERRORREPORT:PROMPT" Ausgabefenster     Verknüpfen...
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) class tbMatrix __cdecl tbMatrixProjection(float,float,float,float)" (__imp_?tbMatrixProjection@@YA?AVtbMatrix@@MMMM@Z)" in Funktion "_WinMain@16".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) class tbMatrix __cdecl tbMatrixTranslation(class tbVector3 const &)" (__imp_?tbMatrixTranslation@@YA?AVtbMatrix@@ABVtbVector3@@@Z)" in Funktion "_WinMain@16".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: class tbColor & __thiscall tbColor::operator=(class tbColor const &)" (__imp_4tbColor@@QAEAAV0@ABV0@@Z)" in Funktion "_WinMain@16".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall tbColor::tbColor(float,float,float)" (__imp_0tbColor@@QAE@MMM@Z)" in Funktion "_WinMain@16".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: class tbVector3 & __thiscall tbVector3::operator=(class tbVector3 const &)" (__imp_4tbVector3@@QAEAAV0@ABV0@@Z)" in Funktion "_WinMain@16".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall tbVector3::tbVector3(float,float,float)" (__imp_0tbVector3@@QAE@MMM@Z)" in Funktion "_WinMain@16".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Direct3DCreate9@4" in Funktion ""void __cdecl initdx(void)" (?initdx@@YAXXZ)".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall tbColor::tbColor(void)" (__imp_0tbColor@@QAE@XZ)" in Funktion ""public: __thiscall SVertex::SVertex(void)" (0SVertex@@QAE@XZ)".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall tbVector3::tbVector3(void)" (__imp_0tbVector3@@QAE@XZ)" in Funktion ""public: __thiscall SVertex::SVertex(void)" (0SVertex@@QAE@XZ)".
C:\Users\lars\Documents\Visual Studio 2008\Projects\dr\Debug\dr.exe : fatal error LNK1120: 9 nicht aufgelöste externe Verweise.
 Ergebnisse     Das Buildprotokoll wurde unter "file://c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\BuildLog.htm" gespeichert.
dr - 10 Fehler, 0 Warnung(en)
```
Ja, die Engine und die DirectX Daten sind eingebunden(glaube ich, bin aber durch all die Probleme etwas verwirrt).


----------



## Anfänger92 (24. August 2009)

Wenn es auf die eine Art klappt is doch schonmal gut 

Das Problem hatte ich noch nie. Aber vll solltest du nicht die Porjektmappe erstellen sondern nur das aktive Programm. Das geht auch über das grüne Dreieck oder "F5".

Gruß
Anfänger


----------



## anfängerregnäfna (25. August 2009)

Die Kompilation funktioniert zwar, aber das starten über den grünen Pfeil nicht. Nachdem ich auf den Pfeil gedrückt habe, startet ertellen...., innklusive folgender Fehlermeldung:

```
Buildprotokoll     Erstellen wurde gestartet: Projekt: "dr", Konfiguration: "Debug|Win32"
 Befehlszeilen     Die temporäre Datei "c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\RSP0000034836268.rsp" wird erstellt. Inhalt:
[
/OUT:"C:\Users\lars\Documents\Visual Studio 2008\Projects\dr\Debug\dr.exe" /INCREMENTAL /MANIFEST /MANIFESTFILE:"Debug\dr.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Users\lars\Documents\Visual Studio 2008\Projects\dr\Debug\dr.pdb" /SUBSYSTEM:WINDOWS /DYNAMICBASE /NXCOMPAT /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

".\Debug\main.obj"

".\Debug\dr.exe.embed.manifest.res"
]Erstellen der Befehlszeile "link.exe @"c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\RSP0000034836268.rsp" /NOLOGO /ERRORREPORT:PROMPT" Ausgabefenster     Verknüpfen...
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) class tbMatrix __cdecl tbMatrixProjection(float,float,float,float)" (__imp_?tbMatrixProjection@@YA?AVtbMatrix@@MMMM@Z)" in Funktion "_WinMain@16".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) class tbMatrix __cdecl tbMatrixTranslation(class tbVector3 const &)" (__imp_?tbMatrixTranslation@@YA?AVtbMatrix@@ABVtbVector3@@@Z)" in Funktion "_WinMain@16".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: class tbColor & __thiscall tbColor::operator=(class tbColor const &)" (__imp_4tbColor@@QAEAAV0@ABV0@@Z)" in Funktion "_WinMain@16".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall tbColor::tbColor(float,float,float)" (__imp_0tbColor@@QAE@MMM@Z)" in Funktion "_WinMain@16".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: class tbVector3 & __thiscall tbVector3::operator=(class tbVector3 const &)" (__imp_4tbVector3@@QAEAAV0@ABV0@@Z)" in Funktion "_WinMain@16".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall tbVector3::tbVector3(float,float,float)" (__imp_0tbVector3@@QAE@MMM@Z)" in Funktion "_WinMain@16".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Direct3DCreate9@4" in Funktion ""void __cdecl initdx(void)" (?initdx@@YAXXZ)".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall tbColor::tbColor(void)" (__imp_0tbColor@@QAE@XZ)" in Funktion ""public: __thiscall SVertex::SVertex(void)" (0SVertex@@QAE@XZ)".
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall tbVector3::tbVector3(void)" (__imp_0tbVector3@@QAE@XZ)" in Funktion ""public: __thiscall SVertex::SVertex(void)" (0SVertex@@QAE@XZ)".
C:\Users\lars\Documents\Visual Studio 2008\Projects\dr\Debug\dr.exe : fatal error LNK1120: 9 nicht aufgelöste externe Verweise.
 Ergebnisse     Das Buildprotokoll wurde unter "file://c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\BuildLog.htm" gespeichert.
dr - 10 Fehler, 0 Warnung(en)
```
Der Compiler kennt scheinbar die TriBase Klassen nicht, aber ich habe angegeben:

```
#include <d3d9.h>
#include <d3dx9.h>
#include <TriBase.h>
#include <windows.h>
```


----------



## Anfänger92 (25. August 2009)

schreib mal unter die include's


```
#pragma comment(lib, "TriBaseD.lib")
#pragma comment(lib, "D3D9D.lib")
```

Dann sollte es auf jeden Fall kompilieren.

Ich glaub in den Projekt-Einstellungen is da noch i-ein Fehler.

Gruß
Anfänger


----------



## anfängerregnäfna (27. August 2009)

Hab ich gemacht, folgende Fehlermeldung:

```
Buildprotokoll     Erstellen wurde gestartet: Projekt: "dr", Konfiguration: "Debug|Win32"
 Befehlszeilen     Die temporäre Datei "c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\RSP00000148243860.rsp" wird erstellt. Inhalt:
[
/Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /c /ZI /TP ".\main.cpp"
]Erstellen der Befehlszeile "cl.exe @"c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\RSP00000148243860.rsp" /nologo /errorReport:prompt"Die temporäre Datei "c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\RSP00000248243860.rsp" wird erstellt. Inhalt:
[
/OUT:"C:\Users\lars\Documents\Visual Studio 2008\Projects\dr\Debug\dr.exe" /INCREMENTAL /MANIFEST /MANIFESTFILE:"Debug\dr.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Users\lars\Documents\Visual Studio 2008\Projects\dr\Debug\dr.pdb" /SUBSYSTEM:WINDOWS /DYNAMICBASE /NXCOMPAT /MACHINE:X86 TriBase.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

".\Debug\main.obj"

".\Debug\dr.exe.embed.manifest.res"
]Erstellen der Befehlszeile "link.exe @"c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\RSP00000248243860.rsp" /NOLOGO /ERRORREPORT:PROMPT" Ausgabefenster     Kompilieren...
main.cpp
Verknüpfen...
LINK : fatal error LNK1104: Datei "D3D9D.lib" kann nicht geöffnet werden.
 Ergebnisse     Das Buildprotokoll wurde unter "file://c:\Users\lars\Documents\Visual Studio 2008\Projects\dr\dr\Debug\BuildLog.htm" gespeichert.
dr - 1 Fehler, 0 Warnung(en)
```

Vielen Dank für all die guten Tips und die Hilfsbereitschaft


----------



## Anfänger92 (28. August 2009)

ok...

Versuch mal statt D3D9D.lib, D3D9d.lib.

ansonsten D3D9.lib

MFG
Anfänger


----------



## anfängerregnäfna (3. September 2009)

Vielen Dank
jetzt lässt sich die Datei erstellen, aber leider stürzt sie immer noch ab.
Anbei die Erstellung des PDIRECT3DDEVICE9

```
void initdx()
{
g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);
D3DDISPLAYMODE d;
g_pd3d->GetAdapterDisplayMode(0,&d);
D3DPRESENT_PARAMETERS pParam;
ZeroMemory(&pParam,sizeof(pParam));
pParam.BackBufferWidth=d.Width;
pParam.BackBufferHeight=d.Height;
pParam.BackBufferFormat=d.Format;
pParam.BackBufferCount=1;
pParam.MultiSampleType=D3DMULTISAMPLE_NONE;
//pParam.MultiSampleQuality=1;
pParam.SwapEffect=D3DSWAPEFFECT_COPY;
pParam.hDeviceWindow=hwnd;
pParam.Windowed=TRUE;
pParam.EnableAutoDepthStencil=false;
//pParam.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
pParam.FullScreen_RefreshRateInHz=d.RefreshRate;
pParam.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
g_pd3d->CreateDevice(0,D3DDEVTYPE_HAL,hwnd,D3DCREATE_MIXED_VERTEXPROCESSING,&pParam,&g_pd3ddev);
};
```

Ich habe eben den selben Code in CodeBlocks ausgeführt und erhalte folgende Fehlermeldung:

```
Die Anwendung konnte nicht gestartet werden, weil d3dx9d_30.dll nicht gefunden werden konnte
Neuinstallation der anwendung könnte das Problem beheben.
```
Ich weiß, dass vc++2008 eigentlich ausreicht, aber da ich persönlich lieber mit codeblocks programmiere (sprich: versuche zu programmieren) wäre ich dankbar, wenn mir jemand sagen könnte, wie man diesen Fehler behebt.


----------



## Anfänger92 (3. September 2009)

Hi,

zu dem Problem mit CodeBlocks:
So wie sich das anhört hast du bei CodeBlocks nicht das aktuelle SDK benutzt oder du musst die DLL an eine bestimmte Position verschieben.

Zu dem anderen Probelm:
1. Ich glaub du musst für "FullScreen_RefreshRateInHz" 0 setzen,
da du nur eine RefreshRate im Vollbild-Modus angeben darfst.

```
pParam.FullScreen_RefreshRateInHz = 0;
```
2. Benutz mal anstatt D3DSWAPEFFECT_COPY D3DSWAPEFFECT_DISCARD.

```
pParam.SwapEffect=D3DSWAPEFFECT_DISCARD;
```

Gruß
Anfänger


----------



## anfängerregnäfna (9. September 2009)

Hab` ich probiert, funktioniert leider nicht.


----------



## Anfänger92 (12. September 2009)

Hey,

Sorry für die späte Antwort, bin jetz ina Ausbildung und inna Woche nich mehr so viel da 

Versuchs mal genau mit dekm Code aus dem Buch, oder Benutz mal ein Referenz-Device.
Also: D3DDEVTYPE_REF <-- oder so ähnlich 

Sonst guck nochmal ins Buch da mussten eigentlich stehen welche Parameter richtig sind.

MFG
Anfänger


----------



## snowrpa (11. November 2009)

Hallo Zusammen

Ich hab genau das gleiche Problem... ich habe die libs alle eingebunden etc. aber wenn ich ner SVertex Struktur nen Vector zuweisen will sagter bei mir auch 

unresolved external symbol "__declspec(dllimport) public: class tbVector3 & __thiscall tbVector3:perator=(class tbVector3 const &)" (__imp_4tbVector3@@QAEAAV0@ABV0@@Z) referenced in function "enum tbResult __cdecl InitScene(class CDirect3D *)" (?InitScene@@YA?AW4tbResult@@PAVCDirect3D@@@Z)

die dwColor zuweisungen klappen alle....
ich bin mir recht sicher, die libs korrekt eingebunden zu haben. (projekt->eigenschaften blablub)
und wenn ich die zeile #pragma comment(lib, "TriBaseD.lib") hinzufüge ändert das auch nichts....

jmd ne idee?


----------

