andijota Junior JLI'ler
Anmeldedatum: 07.11.2002 Beiträge: 66 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 02.05.2004, 19:34 Titel: "freeStyle"-Lösung zum Module ohne ERROR #include |
|
|
/// SuchWorte: Programm in Module aufteilen ///
Das Erforschen fuer die richtige stelle und reihenfolge von Modulen/#include -Files kann man mit folgender Vorgehensweise umgehen. ZB um weitgehend unbekannten code mischen, Wenn das Programm erstmal wie gewuenscht läuft, is ja auch noch gelegenheit zum optimieren.
Über Meinungen freu ich mich.
konkret hab ich mir was aus CubeMap und Donuts4 (von DX9SDK), und Szene3D (aus JLI. 9 Buch) zusammengebastelt.
Ich benutze hier zur erläuterung ausschnitte aus dem GameLoopDemo das im
JLI-Spieleprogrammierung
Forum zu finden ist.
andi
Code: |
////////////////////////////////////////////////////////////////
// WinMain.cpp:
/* Copyright (C) 2002 / 2003 AFE-GmdG */
/* Es _DARF_ nur WinMain.h includiert werden, weitere Header werden dort eingebunden */
#include "WinMain.h"
// bei freestyle mach ich eine Ausnahme:
// nur EINMAL einbinden
#define _frestyle_6_
# include "console.h"
# include "console.cpp"
// vergessen und NIE wieder
#undef _frestyle_6_
// auch .cpp so einbinden und trotzdem ins projekt aufnehmen
// wenn die Dateien nur #include-t werden und nur im Ordner "Externe Abhaengigkeiten" erscheinen,
// sind die class-es nicht im Arbeitsbereich und koennen nicht
// einfach von der Klassenansicht aus angesprungen werden.
// zb. kann man die dateien nach der ersten uebersetzung vom Ordner
// "Externe Abhaengigkiten" in "Header-Dateien" bzw. "Quellcodedateien" ziehen
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
// _frestyle_6_ Beispiel
open_console();
//
CGameLoopDemo *lpGameLoopDemo; // Instanzvariable für das Hauptprogramm
BOOL RetVal=FALSE; // Testvariable des Rückgabewertes
lpGameLoopDemo=new CGameLoopDemo(); // GameLoopDemo Instanziieren
if(lpGameLoopDemo->Init(hInstance)) // GameLoopDemo Initialisieren
RetVal=lpGameLoopDemo->Run(); // ... und ausführen
lpGameLoopDemo->Done(); // Aufräumarbeiten
delete lpGameLoopDemo; // ->Damit die Destruktoren unterhalb von GameLoopDemo aufgerufen werden
// _frestyle_6_ Beispiel
close_console();
//
if(!RetVal) // Wenn der Rückgabewert false ist...
return(-1); // ... Programm mit Fehlercode -1 beenden
return 0; // sonst Programm normal beenden
}
|
Code: |
//#include <console.h>
/////////////////////////////////////////////////////////////////
// <so steht s im Lehrbuch>:begin
/*
#ifndef _console_h_666
#define _console_h_666
# if _MSC_VER > 1000
#pragma once
# endif // _MSC_VER > 1000
*/
// </so steht s im Lehrbuch>:end ///////////////////////////////
// trotzdem kommt bei nachlaessiger #include-Planung der Fehler wie:
// WinMain.obj : error LNK2005: "void __cdecl open_console(void)" (?open_console@@YAXXZ) bereits in GameLoopDemo.obj definiert
// bevor man lang forscht, hilft gegen diesen ERROR mein
// "freestyle - #include - Konzept" //begin ////////////////////
#ifdef _frestyle_6_
// "freestyle - #include - Konzept" //end //////////////////////
//#inc lude "STDAFX.H" //nur fuer CSt ring mach ich das
#include <io.h>
#include <stdio.h>
#include <fcntl.h>
#include <iostream.h>
#ifndef _WIN32_WINDOWS
# include <windows.h>
#endif
void open_console();
void close_console();
#endif // _frestyle_6_
extern void open_console();
extern void close_console();
/*
#endif //_console_h_666 // Lehrbuch
*/
/////////////////////////////////////////////////////////////////
|
Code: |
//#include <console.h>
/////////////////////////////////////////////////////////////////
// <so steht s im Lehrbuch>:begin
/*
#ifndef _console_h_666
#define _console_h_666
# if _MSC_VER > 1000
#pragma once
# endif // _MSC_VER > 1000
*/
// </so steht s im Lehrbuch>:end ///////////////////////////////
// trotzdem kommt bei nachlaessiger #include-Planung der Fehler wie:
// WinMain.obj : error LNK2005: "void __cdecl open_console(void)" (?open_console@@YAXXZ) bereits in GameLoopDemo.obj definiert
// bevor man lang forscht, hilft gegen diesen ERROR mein
// "freestyle - #include - Konzept" //begin ////////////////////
#ifdef _frestyle_6_
// "freestyle - #include - Konzept" //end //////////////////////
//#inc lude "STDAFX.H" //nur fuer CSt ring mach ich das
#include <io.h>
#include <stdio.h>
#include <fcntl.h>
#include <iostream.h>
#ifndef _WIN32_WINDOWS
# include <windows.h>
#endif
void open_console();
void close_console();
#endif // _frestyle_6_
extern void open_console();
extern void close_console();
/////////////////////////////////////////////////////////////////
/*
#endif //_console_h_666
*/
|
|
|