Logging

Hallo allemaal, dit is mijn eerste tut. Ik zit volgens mij nog niet bij de teamlijst, maar ik geloof dat ik er wel bij hoor. Okee okee ff snel verder. Deze tutorial gaat over loggen. Ik zal gebruik maken van een Class en C++ file i/o (hiervoor moet je fstream.h includen).

Zoals je weet gebruiken we in C++ veel class-en, hier ff een voorbeeld:


class DirectLog{
public:

LPDIRECTDRAW7 lpDD;
LPDIRECTDRAWSURFACE7 lpS;
HRESULT ddrval;
DirectLog();
~DirectLog();
fstream log;
}
Ik ben zelf niet zo'n Object Oriented-programmeur dus let niet op mn foutjes :P. Zo, we hebben een class met DirectDraw variables, een Con- en Destructor, en ....wat is dat?! Ja je ziet het goed: fstream log. Dit is nodig om naar een bestand te schrijven of ervan te lezen.

Nu gaan we ff de functions vullen:



DirectLog::DirectLog(){
log.open("log.txt",ios::out);   				       //1

ddrval = DirectDrawCreateEx(NULL,(void**)&lpDD,IID_IDirectDraw7,NULL); //2
if (ddrval != DD_OK){
	this->log<<"DirectDrawCreateEx() mislukt :'( \n";              //3
		
}else{
this->log<<"DirectDrawCreateEx() gelukt :-D \n";                       //4
}
}// einde van constructor();

DirectLog::~DirectLog(){
if(lpDD){							       //5
lpDD->Release();
lpDD=NULL;
}
this->log<<"DirectDraw Object is veilig Released :-D \n";
file.close();                                                          //6
}// einde van destructor();   
Okee hier is de uitleg:

1) Dit is om een bestand te maken (log.txt) en ios::out is om te vertellen dat je het gebruikt voor output (schrijven) je kan ook ios::in doen maar daar vertel ik straks meer over.
2) Hier maak je het DirectDraw object. HRESULT ddrval is om te checken of het is gelukt.
3) Als het lukt returnt DirectDrawCreateEx() DD_OK, dus als het niet DD_OK is is het mislukt.
4) Als het dan inderdaad mislukt, gaan we het loggen:

"this->" is hetzelfde als "DirectLog->", je kan eigelijk ook gewoon gelijk "log<<" doen maar ik wil je dit leren voor toekomstige tutorials. "log<<..." is hetzelfde als cout<< alleen doe je het met de variable-name, in ons geval dus log.

De slimme onderons denkt gelijk aan cin>>, nietwaar? Okee als je iets wilt gebruiken uit een bestand doe het zo:

log.open("log.txt",ios::out | ios::in);

Ziet er makkelijk uit en is het ook, | gebruik je om te mengen, ios::in is voor "input". Als je dan iets wilt gebruiken doe je dus log>>x; LET OP! je moet wel een variable hebben waar de data ingaat, ik heb dus int x beruikt.

5) Nu zitten we is de Destructor die geroepen wordt als de geheugen van de class verwijderd wordt, dus als het niet meer wordt gebruikt, bijv. als dit programma wordt afgesloten.

if(lpDD)

Als je dit niet weet moet je ff beter C++ leren maar ik vertel ff, if(lpDD) is hetzelfde als if(lpDD==true).

6) file.close(); spreekt voorzich nietwaar? wij programmeurs zijn altijd erg voorzichtig niet waar? Daarom sluiten we onze logboek netjes af.

Ik heb lpS niet gebruikt want ik ga niet een hele game voor je schrijven ;-P Logboeken zijn hele handige debuggers, je kunt aan je log.txt zien waar het dus mis is gegaan en zo je probleem oplossen. Nog meer vragen? rick_rackplayer@hotmail.com