 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
phlip Mini JLI'ler

Anmeldedatum: 27.08.2005 Beiträge: 39
Medaillen: Keine
|
Verfasst am: 07.11.2005, 16:28 Titel: Linker Fehler |
|
|
Hi.
Ich hab andauernt die Fehlermeldung
Code: | LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/Test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe. |
Ich muss dann immer den Debug Ordner löschen, dann kann ich einmal compilieren.
Achja:Ich benutz VC6. Nein, ich hab kein falsches Projekt ausgewählt.
Wäre sehr dankbar für Hilfe.Das nervt nämlich wie Sau. |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 07.11.2005, 16:39 Titel: |
|
|
Wie immer mehr Infos über dein Projekt, was für Typ, etc.
Ansonsten wird es mit der Hilfe nur schwer. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
phlip Mini JLI'ler

Anmeldedatum: 27.08.2005 Beiträge: 39
Medaillen: Keine
|
Verfasst am: 07.11.2005, 16:51 Titel: |
|
|
Oh, ich hatte eigentlich was reinkopiert. Hatte ich zu mindest gedacht.
Also ich hab eine Win32 Application. Dadrin wird D3D verwendet.
Ansonsten wüste ich nicht was ich noch posten soll.
Was auch komisch ist:Seitdem ich grad hier gepostet hab geht alles wunderbar. |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 07.11.2005, 17:05 Titel: |
|
|
Wenn du dein Projekt einmal Compilieren kannst und danach nicht mehr, ist es sehr wahscheinlich, dass die Exe-Datei noch ausgeführt wird, wenn du erneut kompilieren willst. So existiert nämlich ein Schreibschutz auf dieser und der Linker könnte zwar, darf aber nicht
Lass dein Programm doch mal im Debugger schrittweise ablaufen und überprüfe, ob du dein Programm auch wirklich beendest (und nicht nur das Hauptfenster geschlossen wird) _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
 |
smile_virus Junior JLI'ler
Alter: 34 Anmeldedatum: 19.08.2004 Beiträge: 64
Medaillen: Keine
|
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 07.11.2005, 20:04 Titel: |
|
|
Einer von ca. 1 Mio Threads, alleine in diesem Forum, welcher exakt deinen Fehler behandelt. FAQ hat dazu auch was zubieten. |
|
Nach oben |
|
 |
phlip Mini JLI'ler

Anmeldedatum: 27.08.2005 Beiträge: 39
Medaillen: Keine
|
Verfasst am: 08.11.2005, 13:26 Titel: Re: Linker Fehler |
|
|
@smile_virus, Greven
phlip hat Folgendes geschrieben: | Nein, ich hab kein falsches Projekt ausgewählt.
Wäre sehr dankbar für Hilfe.Das nervt nämlich wie Sau. |
@AFE-GmdG:
Wenn das Programm noch laufenwürde, könnte ich den Debug Ordner nicht löschen. Oder etwa nicht? |
|
Nach oben |
|
 |
CorDharel Junior JLI'ler

Anmeldedatum: 15.10.2002 Beiträge: 73 Wohnort: Winterthur, Zürich, CH Medaillen: Keine
|
Verfasst am: 09.11.2005, 10:28 Titel: |
|
|
AFE-GmdG hat Folgendes geschrieben: | Wenn du dein Projekt einmal Compilieren kannst und danach nicht mehr, ist es sehr wahscheinlich, dass die Exe-Datei noch ausgeführt wird, wenn du erneut kompilieren willst. So existiert nämlich ein Schreibschutz auf dieser und der Linker könnte zwar, darf aber nicht
Lass dein Programm doch mal im Debugger schrittweise ablaufen und überprüfe, ob du dein Programm auch wirklich beendest (und nicht nur das Hauptfenster geschlossen wird) |
Wenn man nicht mehr im Debugmodus ist dann ist das Programm doch ganz beendet oder? Oder kann es noch weiterlaufen?
Und schauen ob es ganz geschlossen wird bedeutet Task Manager, right?  _________________ Greetz CorDharel |
|
Nach oben |
|
 |
phlip Mini JLI'ler

Anmeldedatum: 27.08.2005 Beiträge: 39
Medaillen: Keine
|
Verfasst am: 19.11.2005, 17:52 Titel: |
|
|
Mir ist jetzt aufgefallen, dass der fehler nur kommt wenn ich in der Datei Direct3D.h was änder.
Ich hoffe das ist nicht zu viel Code.
In der utils.h steht die Funktion ReleaseObj()
Exception erklärt sich sich von selbst (schöne Tutorials Patrick )
CPP: | // ###########################################################################
// Datei: Direct3D.h
// ###########################################################################
// Autor: phlip
// Erstellt: 19.11.2005
// Änderungen: 19.11.2005 Datei/Klasse erstellt
// ###########################################################################
// Beschreibung: Direct3D - Klasse
#if !defined(__Direct3D_h__)
#define __Direct3D_h__
// L I N K E R ###############################################################
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
#pragma comment(lib, "dxguid.lib")
// I N C L U D E S ###########################################################
#include "utils.h"
#include "Exceptions.h"
#include <d3d9.h>
#include <d3dx9.h>
#include <string>
#include <windows.h>
// D E F I N I T I O N E N ###################################################
// S T R U K T U R E N #######################################################
//Direct3D Klasse
class CDirect3D
{
public:
CDirect3D();
~CDirect3D();
bool Init(HWND hWnd, bool Windowed = true);
LPDIRECT3D9 GetD3D();
LPDIRECT3DDEVICE9 GetDevice();
LPDIRECT3DSURFACE9 GetBackBuffer();
void BeginScene();
void EndScene();
protected:
LPDIRECT3D9 m_D3D;
LPDIRECT3DDEVICE9 m_Device;
LPDIRECT3DSURFACE9 m_BackBuffer;
};
// F U N K T I O N E N #######################################################
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC Construktor
//
// Setzt Anfangswerte
// ///////////////////////////////////////////////////////////////////////////
CDirect3D::CDirect3D()
{
m_D3D = NULL;
m_Device = NULL;
m_BackBuffer = NULL;
}
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC Init
//
// Initialisiert D3D
// ///////////////////////////////////////////////////////////////////////////
bool CDirect3D::Init(HWND hWnd, bool Windowed)
{
if(!(m_D3D = Direct3DCreate9(D3D_SDK_VERSION)))
{
EXCEPTION("Can't create Direct3D object.");
return false;
}
D3DDISPLAYMODE DisplayMode;
if(FAILED(m_D3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &DisplayMode)))
{
EXCEPTION("Can't get AdapterDisplayMode.");
return false;
}
D3DPRESENT_PARAMETERS PParams;
ZeroMemory(&PParams,sizeof(PParams));
PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
PParams.hDeviceWindow = hWnd;
PParams.Windowed = Windowed;
PParams.MultiSampleType = D3DMULTISAMPLE_NONE;
RECT ClientRect;
if(!GetClientRect(hWnd, &ClientRect))
{
EXCEPTION("Can't get ClientRect.");
return false;
}
PParams.BackBufferWidth = ClientRect.right;
PParams.BackBufferHeight = ClientRect.bottom;
PParams.BackBufferFormat = DisplayMode.Format;
if(FAILED(m_D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING, &PParams, &m_Device)))
{
EXCEPTION("Can't create Direct3D Device.");
return false;
}
if(FAILED(m_Device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &m_BackBuffer)))
{
EXCEPTION("Can't get BackBuffer.");
return false;
}
return true;
}
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC BeginScene
//
// Beginn der D3D Scene
// ///////////////////////////////////////////////////////////////////////////
void CDirect3D::BeginScene()
{
if(FAILED(m_Device->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255), 0, 0)))
{
EXCEPTION("Can't clear BackBuffer.");
}
if(FAILED(m_Device->BeginScene()))
{
EXCEPTION("Can't begin Scene.");
}
}
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC EndScene
//
// Ende der D3D Scene
// ///////////////////////////////////////////////////////////////////////////
void CDirect3D::EndScene()
{
if(FAILED(m_Device->EndScene()))
{
EXCEPTION("Can't end Scene.");
}
if(FAILED(m_Device->Present(0, 0, 0, 0)))
{
EXCEPTION("Can't present Scene.");
}
}
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC GetD3D
//
// Gibt D3D Objekt zurück
// ///////////////////////////////////////////////////////////////////////////
LPDIRECT3D9 CDirect3D::GetD3D()
{
return m_D3D;
}
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC GetDevice
//
// Gibt D3D Device zurück
// ///////////////////////////////////////////////////////////////////////////
LPDIRECT3DDEVICE9 CDirect3D::GetDevice()
{
return m_Device;
}
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC GetBackBuffer
//
// Gibt BackBuffer zurück
// ///////////////////////////////////////////////////////////////////////////
LPDIRECT3DSURFACE9 CDirect3D::GetBackBuffer()
{
return m_BackBuffer;
}
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC Destruktor
//
// Gibt Speicher wieder frei
// ///////////////////////////////////////////////////////////////////////////
CDirect3D::~CDirect3D()
{
ReleaseObj(m_BackBuffer);
ReleaseObj(m_Device);
ReleaseObj(m_D3D);
}
#endif |
Zuletzt bearbeitet von phlip am 30.08.2011, 12:59, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 19.11.2005, 20:33 Titel: |
|
|
phlip
Freut mich das Du Dir etwas von meinem Codingstil angewöhnt hast aber man kann noch was dran Pfeilen:
1. die ganzen Getter raus, richtige Pros machen das mit friend
2. Singleton rulz. Die Klasse wird ja nur 1x instanziert, also wäre ein Singleton perfekt! (Spart sogar 1 zeile )
3. Paar kommentare was die Funktionsaufrufe bedeuten (Laien lernen daraus schneller )
4. ich steh mehr auf das suffix _ als auf das präfix m_ aber jeder wie er will
5. Eindeutigkeit: Ich habs nicht so mit LP Typedefs sucken für mich total, aber auch hier wieder, jeder wie will
6. Bitte benutz auch Cpp dateien, übersichtlichkeit ist das A und O im dev.
7. Bitte benutz initialisierungslisten (siehe FunnyBreak tutorial), dieses hier CPP: | m_D3D = NULL;
m_Device = NULL;
m_BackBuffer = NULL; | Ist 1. Langsam und 2. sehr unschön
8. CPP: | void CDirect3D::BeginScene() | sieht für mich aus wie ein Funktionsaufruf bzw. lokale Funktionsprototypierung. daher ein void in die Klammern aber auch hier wieder: geschmackssache.
9. EXCEPTION bringt bei mir nur was mit DEBUG_STACK Sonst weiß ich auch nicht woher die Exceptions kommen  _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
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
|