C# is toch wel fundamenteel anders dan C of C++... w.m.b. kun je die vragen gewoon hier stellen, maar of je antwoord krijgt is een tweedequote:Op zaterdag 6 maart 2010 20:42 schreef Netsplitter het volgende:
C# niet?
Objective C.quote:Op zaterdag 6 maart 2010 20:43 schreef Trollface. het volgende:
[..]
C# is toch wel fundamenteel anders dan C of C++... w.m.b. kun je die vragen gewoon hier stellen, maar of je antwoord krijgt is een tweede
Als we wat C#-guru's hebben kan dit C(++/#) voor dummies worden w.m.b.
Als wat mensen hier (gaan) zitten die er verstand van hebben kan dat wat mij betreft toegevoegd worden, C#/VB.NET kan inderdaad beter in een apart topic.quote:
Misschien is voorganger idd wat slecht verwoord, maar volgens mij wordt C niet echt vaak meer gebruikt.quote:Op zondag 7 maart 2010 11:56 schreef LucasHulshof het volgende:
Want in tegenstelling tot wat er in de o.p. staat wordt C nog wel veel gebruikt en is het niet de voorganger van C++
C# is écht fundamenteel anders dan C++, C# is een samengooisel van C++ en Java, en het lijkt daarbij meer op Java imho.quote:Op zondag 7 maart 2010 13:41 schreef Crutch het volgende:
Btw, C++ is toch gewoon next leveL C? Grootste toevoeging van C++ is Object Oriented Programming.
Dus eigenlijk zou C++/C# niet zo raar zijn voor dit topic tenzij het verschil tussen C++ en C# té groot is.
Wat maak je zoal?quote:Op zondag 7 maart 2010 14:33 schreef progje het volgende:
Ah zal eens gaan meelezen..
Programmeer in c++ en c#
Ik werk aan ons eigen product, waarover ik op FOK verder maar niet zoveel ga vertellenquote:
Laat de Gordon Ramsay van de Unix wereld (yeah i'm talking about you Linus Torvaldsquote:Op zondag 7 maart 2010 13:32 schreef Trollface. het volgende:
[..]
Misschien is voorganger idd wat slecht verwoord, maar volgens mij wordt C niet echt vaak meer gebruikt.
Dev-C++ stond al in de OP, ik heb QT toegevoegd.
Ja maar een kernel is ook niet bepaald het meest standaard stuk code.quote:Op zondag 7 maart 2010 21:42 schreef ErictheSwift het volgende:
[..]
Laat de Gordon Ramsay van de Unix wereld (yeah i'm talking about you Linus Torvalds [ afbeelding ] ) het maar niet horen. De Linux kernel bestaat al uit een paar tiental miljoen lijnen C-code.
1 |
void main? Echt waar?quote:
Onzin, in de wereld van hardcore berekeningen en algoritmen is C(++) ongeevenaard.quote:Op maandag 8 maart 2010 16:40 schreef Cruise.Elroy het volgende:
Volgens mij zijn er bijna geen dummies in C++, die zijn slim en gaan voor een taal als C#
Begrijpend lezen is blijkbaar niet aan iedereen besteed.quote:Op maandag 8 maart 2010 16:41 schreef Intrepidity het volgende:
[..]
Onzin, in de wereld van hardcore berekeningen en algoritmen is C(++) ongeevenaard.
Dat blijkt jaquote:Op maandag 8 maart 2010 17:12 schreef Cruise.Elroy het volgende:
[..]
Begrijpend lezen is blijkbaar niet aan iedereen besteed.
Hoezo is voor C# gaan slim?quote:Op maandag 8 maart 2010 16:40 schreef Cruise.Elroy het volgende:
Volgens mij zijn er bijna geen dummies in C++, die zijn slim en gaan voor een taal als C#
Volgens mij wordt dat nou juist niet expliciet bedoeld.quote:
Als je goed leest wel.quote:Op vrijdag 12 maart 2010 16:16 schreef progje het volgende:
[..]
Volgens mij wordt dat nou juist niet expliciet bedoeld.
Pfffffffffff, C#quote:Op vrijdag 12 maart 2010 16:20 schreef Crutch het volgende:
[..]
Als je goed leest wel.
Verklaring:
Na een n00b geweest te zijn in C++ hebben ze besloten om voor C# te gaan.
Oftewel; ze zijn nooit verdergegaan in C++
En dat wordt dan gezien als slimme keuze.
Ik ben neutraal daarin. Mocht je namelijk iets Windows-only willen gaan programmeren dat zit je met C# wel wat beter.quote:
Daar gebruik ik PHP voor.quote:Op vrijdag 12 maart 2010 16:39 schreef Catch22- het volgende:
Ik maak alleen maar webbased sites en applicaties... Dus dan C# ruim voldoende.
1 |
1 2 3 4 5 | return 5; } deKlasse.hookCommand("bla", &test); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public: klasse deKlasse; Class2(): {} int klasseTest() { return 3; } void hook() { deKlasse.hookCommand("bla", &klasseTest); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public: klasse deKlasse; Class2(): {} int klasseTest() { return 3; } void hook() { deKlasse.hookCommand("bla", &Class2::klasseTest); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | { int klasseTest() = 0; } class Class2 : public AbstractClass { public: klasse deKlasse; Class2(): {} int klasseTest() {return 3;} } void hook() { deKlasse.hookCommand("bla", Abstract_Class_instantie); } |
1 2 3 4 5 6 7 8 9 10 | { public: klasse deKlasse; Class2(): {} static int klasseTest(Class2* pInstance) {return 3;} } void hook() { deKlasse.hookCommand("bla", Class2::klasseTest(Class_Instantie)); } |
Vooral omdat er zo ontzettende veel notaties rondzwerven kan ik iig iedereen aanraden om namen te nemen die het (meta)type goed aangeven.quote:Op zaterdag 13 maart 2010 21:14 schreef Catch22- het volgende:
Daar verval je snel in als je een Proof of Concept/Testje schrijft maar kheb ook wel ondervonden dat je het gelijk duidelijk moet doen, anders verdwaal je gauw
Het standaard invoersysteem van C++ heeft daar geen standaard oplossing voor.quote:Op zondag 28 maart 2010 13:57 schreef Hameren_Yzer het volgende:
Kent iemand iets zoals getchar() maar dan zonder dat er een enter nodig is
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | { int pointer = 0; char buffer[10]; do { while(_kbhit()) // toets ingedrukt? { int key = _getch(); // toets ophalen if (key == '\r') // enter gedrukt { buffer[pointer] = 0; } else // "normale" toets ingedrukt { buffer[pointer++] = (char) key; std::cout << '*'; } } } while(buffer[pointer]); std::cout << "\nJe wachtwoord is " << buffer << '\n'; } |
offtopic: maar daarvoor wordt juist weer FORTRAN gebruiktquote:Op maandag 8 maart 2010 16:41 schreef Intrepidity het volgende:
[..]
Onzin, in de wereld van hardcore berekeningen en algoritmen is C(++) ongeevenaard.
Ja en elke ander C based programeer taal... dus uiteindelijk gewoon allemaal asambly codequote:Op zondag 28 maart 2010 16:08 schreef Dickbride het volgende:
[..]
offtopic: maar daarvoor wordt juist weer FORTRAN gebruikt
Er worden in de uithoeken van wetenschappelijk onderzoek vaak nog "rare" talen gebruikt. Fortran is nog steeds populairder dan C(++) in sommige gebieden. De eerste adventure game ADVENT was in Fortran geschrevenquote:Op zondag 18 april 2010 01:25 schreef netolk het volgende:
[..]
Ja en elke ander C based programeer taal... dus uiteindelijk gewoon allemaal asambly code
Windows en Mac zijn voor het grootste deel in C en C++ geschreven...quote:Op zondag 18 april 2010 10:25 schreef Cruise.Elroy het volgende:
[..]
Er worden in de uithoeken van wetenschappelijk onderzoek vaak nog "rare" talen gebruikt. Fortran is nog steeds populairder dan C(++) in sommige gebieden. De eerste adventure game ADVENT was in Fortran geschreven
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | struct Test{ int a; Test(){a=0;} int get(){return a;} }; struct Test2{ Test *myPointer; Test2(Test test){myPointer = &test;} int get(){return (*myPointer).a;} int get2(){return myPointer->a;} ~Test2(){delete myPointer; myPointer = 0;} }; int main(){ Test myTest; Test2 Test2(myTest); myTest.a = 9; std::cout << myTest.get() << '\t' << Test2.get() << '\n'; std::cout << myTest.a << '\t' << Test2.myPointer->a << '\n'; int a = 3; int *b; b = &a; *b = 8; std::cout << a << '\t' << *b << '\n'; return 0; } |
1 2 3 | 9 9 8 8 |
1 2 | std::cout << myTest.a << '\t' << Test2.(*myPointer).a << '\n'; |
je kan denk ik beter zoiets gebruiken:quote:Op zondag 28 maart 2010 16:01 schreef Cruise.Elroy het volgende:
[..]
Het standaard invoersysteem van C++ heeft daar geen standaard oplossing voor.
Wat je kan proberen zijn de functies _kbhit() en _getch()
Ze zitten in de header conio.h.
Dit zijn oude functies uit het DOS/POSIX en worden niet meer goed ondersteund dus let daar wel mee op.
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | char GetKey() { // get standard console handle HANDLE myHandle = ::GetStdHandle(STD_INPUT_HANDLE); // read input until a key has been pressed INPUT_RECORD myEvent[1]; DWORD myNumberOfEvents; do { // read input ::ReadConsoleInput(myHandle, myEvent, 1, &myNumberOfEvents); } while ((myEvent[0].EventType != KEY_EVENT) || (myEvent[0].Event.KeyEvent.bKeyDown != TRUE)); // return ASCII code return myEvent[0].Event.KeyEvent.uChar.AsciiChar; } /** * Waits for a key to be pressed and returns the key's virtual key code. * * @returns the virtual key code of the pressed key */ WORD GetVirtualKey() { // get standard console handle HANDLE myHandle = ::GetStdHandle(STD_INPUT_HANDLE); // read input until a key has been pressed INPUT_RECORD myEvent[1]; DWORD myNumberOfEvents; do { // read input ::ReadConsoleInput(myHandle, myEvent, 1, &myNumberOfEvents); } while ((myEvent[0].EventType != KEY_EVENT) || (myEvent[0].Event.KeyEvent.bKeyDown != TRUE)); // return ASCII code return myEvent[0].Event.KeyEvent.wVirtualKeyCode; } |
Ik neem aan dat je OSX bedoelt.quote:Op zondag 18 april 2010 12:02 schreef netolk het volgende:
[..]
Windows en Mac zijn voor het grootste deel in C en C++ geschreven...
Behalve dat mijn oplossing maar 1 regel code is. En nog beter portable ook.quote:Op zondag 18 april 2010 12:10 schreef netolk het volgende:
[..]
je kan denk ik beter zoiets gebruiken:
[ code verwijderd ]
dit werkt dan wel alleen op windows
je zegt zelf dat het niet goed ondersteund word...quote:Op zondag 18 april 2010 12:11 schreef Cruise.Elroy het volgende:
[..]
Behalve dat mijn oplossing maar 1 regel code is. En nog beter portable ook.
quote:Op zondag 18 april 2010 12:05 schreef netolk het volgende:
Ik ben nu een beetje aan het klooien met pointers in C++ maar het werkt niet zo als ik zou verwachten..
dit is de code:
[ code verwijderd ]
de output is:
[ code verwijderd ]
en ik had nog een vraag waarom kan in de onderstaande code het bovenste wel en het onderste niet? dit zou toch het zelfde moeten zijn?
[ code verwijderd ]
bij de onderste code geeft ie out of scope error...
Mvg. netolk
1 2 3 4 5 6 7 8 | Test *myPointer; Test2(Test test){myPointer = &test;} int get(){return (*myPointer).a;} int get2(){return myPointer->a;} ~Test2(){delete myPointer; myPointer = 0;} }; |
1 |
1 |
Niet goed, maar beter dan een spagetti aan windows API callsquote:Op zondag 18 april 2010 12:13 schreef netolk het volgende:
[..]
je zegt zelf dat het niet goed ondersteund word...
wel raar dat Appel zelf wel zegt dat het framework bijvoorbeeld voor een groot deel in objective-C is geschreven en andere dingen ook in C/C++ geschreven zijn...quote:Op zondag 18 april 2010 12:10 schreef Cruise.Elroy het volgende:
[..]
Ik neem aan dat je OSX bedoelt.
Stiekem is OSX in ADA geschreven, maar dat weten veel mensen niet.
Het was een grapje.quote:Op zondag 18 april 2010 12:19 schreef netolk het volgende:
[..]
wel raar dat Appel zelf wel zegt dat het framework bijvoorbeeld voor een groot deel in objective-C is geschreven en andere dingen ook in C/C++ geschreven zijn...
1 |
dacht alquote:Op zondag 18 april 2010 12:24 schreef Cruise.Elroy het volgende:
[..]
Het was een grapje.
ADA is een draak van een taal die door de US Department of Defense verplicht was gesteld ergens in de 80 tot aan eind 90s.
Ongeveer, het gaat gewoonquote:Op zondag 18 april 2010 12:29 schreef netolk het volgende:
[ code verwijderd ]
dus als ik het goed begrijp dan refereert test nu aan een Test en myPointer checkt dan dus de locatie van test die dan weer naar de meegegeven Test in de constructor wijst?
Test voorbeeld;
Test2 voorbeeld2(voorbeeld);
myPointer -> test -> voorbeeld
of klopt dit niet?
dankje voor je reactiequote:Op zondag 9 mei 2010 15:36 schreef Intrepidity het volgende:
Er is denk ik geen 'dé' taal voor een bepaald platform, dat hangt compleet van het project en de eisen en dergelijke af. Voor spellen is C++ inderdaad veelgebruikt op Windows in combinatie met Direct3D en dergelijke, hoewel C# op dat gebied ook prima werkt. C# wordt dan weer meer gebruikt voor 'gewone' windows-applicaties, webapplicaties (icm ASP.net) en RIA's (icm Silverlight)
Ik denk over het algemeen dat je met C# een breder pallet aan applicaties kunt bouwen met dezelfe kennis en moeite (een windows-applicatie bouwen gaat met winforms/wpf nou eenmaal sneller als in C++ met de WIn32-API).
quote:Op zondag 9 mei 2010 21:37 schreef Trollface. het volgende:
Ik zou de sluitknop en het kader eromheen weghalen, je hebt toch al een sluitknop?
Tevens is er een ander topic voor .NET eigenlijk, toch?
nicequote:Op zondag 9 mei 2010 20:07 schreef Crutch het volgende:Ik heb net een (misschien buggy) iTunes remote dingetje gemaakt in C# .Net
M'n eerste werkende programmaatje.
quote:Op zondag 9 mei 2010 23:43 schreef Fortitude het volgende:
Hij crashed wanneer je geen ITunes hebt. Ik zou even een Exception afvangen.
Valt me mee, maar het dan ook niet zon groot dingetjequote:
Hobby.quote:Op maandag 10 mei 2010 09:08 schreef minibeer het volgende:
[..]
Valt me mee, maar het dan ook niet zon groot dingetje. Doe je trouwens programmeren voor je opleiding of als hobby?
okquote:
Conventie. die return-waarde wordt inderdaad bijna nooit gebruikt, maar volgensmij zijn er nog sommige antieke compilers of zelfs OS'en die moeilijk doen als er geen resultaat uit de main komt. Echter nog nooit tegengekomen.quote:Op maandag 10 mei 2010 16:16 schreef minibeer het volgende:
[..]
ok.
klein beginners vraagje. waarom:
int main()
{
...
}
ipv
void main()
{
...
}
Ik heb het tweede nog niet gezien bij voorbeeldcode, terwijl main toch echt nooit wordt gebruikt om een waarde door te geven...
jaquote:Op maandag 10 mei 2010 17:04 schreef Trollface. het volgende:
int main() hoort toch bij de C/C++-standaard?
Klopt. Ik houd er zo m'n eigen regels op na.quote:Op maandag 10 mei 2010 17:04 schreef Trollface. het volgende:
int main() hoort toch bij de C/C++-standaard?
wat voor regels dan?quote:Op maandag 10 mei 2010 22:04 schreef Cruise.Elroy het volgende:
[..]
Klopt. Ik houd er zo m'n eigen regels op na.
Dat je programma's dan überhaupt compilenquote:Op maandag 10 mei 2010 22:04 schreef Cruise.Elroy het volgende:
[..]
Klopt. Ik houd er zo m'n eigen regels op na.
Return values worden zeer veel gebruikt in linux systemen.quote:Op maandag 10 mei 2010 16:44 schreef Trollface. het volgende:
Programma's horen een returncode terug te geven om aan te geven of de executie succesvol was. 0 = succesvol, bij elke andere waarde is er een fout opgetreden. Deze returncode wordt echter nog maar zelden gebruikt.
Valt ook wel mee hoor, in makefiles nog wel ja.quote:Op maandag 10 mei 2010 22:13 schreef Thomass het volgende:
[..]
Return values worden zeer veel gebruikt in linux systemen.
Werkt alleen onder VC++ voor C++, en zou gewoon moeten compilen op elke C compiler afaik.quote:Op maandag 10 mei 2010 22:11 schreef Trollface. het volgende:
[..]
Dat je programma's dan überhaupt compilenmijn compiler pakt void main() niet.
Microsoft wijkt op een aantal punten van de standaard af.quote:Op maandag 10 mei 2010 17:04 schreef Trollface. het volgende:
int main() hoort toch bij de C/C++-standaard?
zou het (visual c++) dan eigenlijk een warning/error moeten geven?quote:Op dinsdag 11 mei 2010 17:40 schreef thabit het volgende:
[..]
Microsoft wijkt op een aantal punten van de standaard af.
Geen idee, ik werk niet meer met VC++, maar je kunt overal warnings en errors voor laten geven dus vast ook wel hiervoor.quote:Op dinsdag 11 mei 2010 18:42 schreef minibeer het volgende:
[..]
zou het (visual c++) dan eigenlijk een warning/error moeten geven?
tja dat zijn vaak ook de problemen met source code...quote:Op dinsdag 11 mei 2010 17:40 schreef thabit het volgende:
[..]
Microsoft wijkt op een aantal punten van de standaard af.
Afgelopen november een editie van Linux Magazine gekocht, meteen verslaafd geraakt door de Qt Framework.quote:Op zondag 7 maart 2010 11:56 schreef LucasHulshof het volgende:
Een erg goede en gratis IDE, voor zowel windows/linux, gericht op het ontwikkelen van software met het QT framework (o.a. google earth maakt hier gebruik van)
QTCreator
Het QT Framework verlost je van het broddelwerk genaamd "windows api" en is compleet object georienteerd. Een aanrader voor iedereen die serieus portable software wil schrijven.
en deze natuurlijk ook:quote:Op woensdag 12 mei 2010 11:26 schreef thabit het volgende:
Dit is trouwens ook wel een goed boek om de basisbeginselen van C++ te leren: http://mindview.net/Books/TICPP/ThinkingInCPP2e.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <iostream> using namespace std; template <class T> T GetMax (T a, T b) { T result; result = (a>b)? a : b; return (result); } int main () { int i=5, j=6, k; long l=10, m=5, n; k=GetMax<int>(i,j); n=GetMax<long>(l,m); cout << k << endl; cout << n << endl; return 0; } |
ik snap het, hoewel het wat onlogisch overkomt om de grootte van een variabele af te laten hangen van de processor.quote:Op dinsdag 25 mei 2010 12:21 schreef progje het volgende:
een int een long zijn verschillende types.
Een long is een "long-int"
of er daadwerkelijk verschil in de lengte zit, is afhankelijk van je processor...
Dus
een short is 2 bytes
een long is 4 bytes
en een int is 2 of 4 bytes afhankelijk van je processor.
ik heb het programmeren geleerd in qbasicquote:Op dinsdag 25 mei 2010 12:21 schreef thabit het volgende:
Op 16-bitssystemen (mogelijk van voor jouw tijd) was een int 16 bit en een long 32 bit.
Is ook raar.quote:Op dinsdag 25 mei 2010 17:38 schreef minibeer het volgende:
[..]
ik snap het, hoewel het wat onlogisch overkomt om de grootte van een variabele af te laten hangen van de processor.
raar maar waar...quote:Op dinsdag 25 mei 2010 17:38 schreef minibeer het volgende:
[..]
ik snap het, hoewel het wat onlogisch overkomt om de grootte van een variabele af te laten hangen van de processor.
quote:Also, when using SDL, you must have your main() function declared like it is above. You can't use void main() or anything like that.
Ik heb thuis een C++-programmeerboek liggen die datatypes van kleinere groottes heeft. Betreft int en long.quote:Op dinsdag 25 mei 2010 21:06 schreef netolk het volgende:
[..]
raar maar waar...
PS.
Hier de groten van alle data typen
Je kan natuurlijk ook de sizeof(agrument) gebruiken om te zien hoe groot iets is.. uitkomst is overigens wel in bytes
Dan is dat waarschijnlijk een oud boek...quote:Op zondag 30 mei 2010 03:27 schreef Ofyles2 het volgende:
[..]
Ik heb thuis een C++-programmeerboek liggen die datatypes van kleinere groottes heeft. Betreft int en long.
Het gaat om 'Sams Teach Yourself C++ in One Hour a Day'.quote:Op zondag 30 mei 2010 10:24 schreef netolk het volgende:
[..]
Dan is dat waarschijnlijk een oud boek...
sizeof is de grootte die jouw computer er van maakt
dat is dus alleen bij nieuwe systemen zo,quote:Op zondag 30 mei 2010 14:36 schreef Ofyles2 het volgende:
[..]
Het gaat om 'Sams Teach Yourself C++ in One Hour a Day'.
Een pijnlijke fout is dat de auteurs van dat boek vermelden dat de long int en de int van dezelfde lengte zijn.
Van een SDL tutorial.quote:
ja nieuwe systemen hebben dat zo en daarom staat dat er waarschijnlijk aangezien (bijna) niemand die oude systemen nog gebruikt en er zeker geen programma's meer voor gemaakt wordenquote:Op zondag 30 mei 2010 15:03 schreef minibeer het volgende:
[..]
dat is dus alleen bij nieuwe systemen zo,
maar hier staat ook dat de int en de long int even groot zijn:
http://www.cplusplus.com/doc/tutorial/variables/
gewoon int nemen dan zit je altijd goedquote:Op zondag 30 mei 2010 15:06 schreef minibeer het volgende:
[..]
Van een SDL tutorial.
Ik vroeg eerst waarom mensen eigenlijk men een main functie die een int was begonnen, maar dat is dus ook voor dit soort zaken
Oh, oké.quote:Op zondag 30 mei 2010 15:03 schreef minibeer het volgende:
[..]
dat is dus alleen bij nieuwe systemen zo,
maar hier staat ook dat de int en de long int even groot zijn:
http://www.cplusplus.com/doc/tutorial/variables/
Mode 13 is iets van 20 jaar geleden. Tegenwoordig heb je geen palette meer van 256 kleurenquote:Op zondag 30 mei 2010 16:02 schreef minibeer het volgende:
klopt het dat het niet mogelijk is om mode 13 graphics in visual c++ te doen? Dat zou niet werken omdat dat een 32-bits compiler is ofzo (verder snap ik hier de ballen van). Het zou wel kunnen in SDL, maar ik zou liever eerst om te oefenen mijn programmatjes uit qbasic naar c++ 'vertalen'. En dan kijken hoe snel ze zijn natuurlijk...
Maar dit zit er dus niet in?
Met qbasic kan je wel gewoon screen 13 graphics en alles doenquote:Op zondag 30 mei 2010 16:10 schreef Cruise.Elroy het volgende:
[..]
Mode 13 is iets van 20 jaar geleden. Tegenwoordig heb je geen palette meer van 256 kleurenHet heeft niets met de taal te maken, maar meer met het feit dat al die systemen uit het DOS-tijdperk stammen en niet meer 1-2-3 beschikbaar zijn.
Ik kan je aanraden om toch SDL te gebruiken, maar misschien eerst C++ goed onder de knie krijgen.
Ik kom ook uit een QBasic achtergrond, en het is wel even wennen.quote:Op zondag 30 mei 2010 16:21 schreef minibeer het volgende:
[..]
Met qbasic kan je wel gewoon screen 13 graphics en alles doen(tot en met XP werkt dat prima). Beetje jammer, want ik vind graphics wel een van de leukere dingen om te doen, en om nou met SDL te beginnen terwijl ik c++ nog niet echt goed ken... maarja.
dankje!quote:Op zondag 30 mei 2010 16:42 schreef Cruise.Elroy het volgende:
[..]
Ik kom ook uit een QBasic achtergrond, en het is wel even wennen.
Als je echt wilt, kan je heel snel een applicatie uit de grond stampen in win32 met een scherm en een tekencanvas (zonder extra libs te hoeven downloaden)
// maken en registeren van een window:
RegisterWindowEx()
CreateWindowEx ()
ShowWindow()
// functie die je moet maken waarin je events afhandeld
WindowProc()
// maken van een tekencanvas
CreateDIBSection()
GetDC()
SelectObject()
// kopieren van het tekencanvas naar de oppervlakte van je windowBitBlt()
BitBlt()
// Afhandelen van window-events:
GetMessage()
en dan de events:
WM_PAINT (herschrijven van je window)
beetje muis-events afvangen:
WM_MOUSEMOVE
WM_LBUTTONDOWN
Het is even googlen maar dan heb je in een dag wel een werkend framework waar je redelijk snel op kan tekenen. Het is alleen allemaal event driven, dus als je wilt animeren zul je iets met CreateTimer() moeten doen of met GetTickCount() de tijd in ms opvragen en dat in het GetMessage() loopje zelf doen.
Als je een oude C++ compiler pakt kan je wss wel oude DOS-executables maken. Geen idee hoe je dat precies kan regelen maar er zijn compilers voor. Dan blijf je helaas wel hangen in een verouderd systeem en dat is wss gewoon zonde van je tijd.quote:Op zondag 30 mei 2010 17:03 schreef minibeer het volgende:
[..]
ok, ziet er wel ok uit, wordt dit gebruikt voor simpele grafieken binnen windows programma's enzo (zeg maar met de windows.h lib)?
Ik zal er eens naar kijke
maar het lijkt me niet zo makkelijk als screen 13 in qbasic
echt jammer dat er geen optie is voor 16-bit compilen (of is dit onzin wat ik nu zeg:P)
Ja ik wil het sowieso wel bij 1 compiler (per taal) houden, anders vind ik het zo'n gedoe. (Om dan bijvoorbeeld sdl bij beide aan de praat te krijgen)quote:Op zondag 30 mei 2010 17:17 schreef Cruise.Elroy het volgende:
[..]
Als je een oude C++ compiler pakt kan je wss wel oude DOS-executables maken. Geen idee hoe je dat precies kan regelen maar er zijn compilers voor. Dan blijf je helaas wel hangen in een verouderd systeem en dat is wss gewoon zonde van je tijd.
ok thanks manquote:Op zondag 6 juni 2010 15:11 schreef Cruise.Elroy het volgende:
je hebt nu een losse CPP file. Je moet er even een project (solution) omheen draaien.
New project maken met de wizard, doe je gewoon C++ appliclication (met console evt) en dan "empty solution". Dan de inhoud van dat bestand in je main.cpp zetten, of dat bestand importeren in je project.
1 2 3 4 5 6 | 'raytrace.exe': Loaded 'C:\Windows\System32\ntdll.dll' 'raytrace.exe': Loaded 'C:\Windows\System32\kernel32.dll' 'raytrace.exe': Loaded 'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcp90d.dll' 'raytrace.exe': Loaded 'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcr90d.dll' The program '[8152] raytrace.exe: Native' has exited with code -1 (0xffffffff). |
Dit, lijkt me.quote:Op zondag 6 juni 2010 16:41 schreef netolk het volgende:
Wat ben je aan het maken minibeer?
die code ziet er interessant uit
dankje nu hoef ik zelf niet te kijkenquote:Op zondag 6 juni 2010 16:45 schreef minibeer het volgende:
niet van mij hoor zo ver ben ik nog niet
gewoon een voorbeeld van raytracen, van het internet geplukt
in qbasic heb ik nog wel eens een raytracer ding gemaakt
Je zal toch meer moeten posten dan een lege log als je verwacht dat we je kunnen helpen.quote:Op zondag 6 juni 2010 16:39 schreef minibeer het volgende:
[..]
ok thanks manik wist dat het zoiets moest zijn
(ik krijg hem nu alleen nog niet aan de praat:
[ code verwijderd ]
)
ja sorry ik heb nog niet echt de betekenis van die log doorquote:Op zondag 6 juni 2010 18:00 schreef Cruise.Elroy het volgende:
[..]
Je zal toch meer moeten posten dan een lege log als je verwacht dat we je kunnen helpen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <iostream> int main(){ std::ifstream Read("lol.jpg"); if(Read.is_open()){ int i = 0; while(!Read.eof()){ char temp = Read.get(); i++; } Read.close(); std::cout << "i = " << i <<'\n'; } return 0; } |
get() leest 1 byte en char is 1 byte.quote:Op zaterdag 26 juni 2010 19:18 schreef Trollface. het volgende:
Binaire data lees je toch niet met chars.
Ik had daar ook naar gekeken er staat een EM (end of medium) maar ik had dus een test bestandje gemaakt met halverwege zo'n EM maar daar las hij wel gewoon netjes tot het einde van het bestand..quote:Op zaterdag 26 juni 2010 19:51 schreef moeftie het volgende:
Zou het kunnen zijn dat op byte positie 275 het EOF teken staat? Waardoor de boel stopt.
@Trollface: Binaire data kun je in een char lezen, als je er verder toch niks mee doet.
Hehe, best wel stom had ik moeten weten XD maar het werkt dus bedankt thabitquote:Op zaterdag 26 juni 2010 20:33 schreef thabit het volgende:
Het probleem is denk ik dat de constructor van ifstream het bestand standaard als tekstbestand opent. Probeer dus
std::ifstream Read("lol.jpg", std::ios_base::binary);
Op http://lesmateriaal.saxion.nl/gej/oopr/index.html , http://lesmateriaal.saxion.nl/gej/cpba1/index.html & http://lesmateriaal.saxion.nl/gej/cpro2/index.html staat ook wel wat. Ligt er maar net aan wat je nodig hebt.quote:Op woensdag 30 juni 2010 05:20 schreef xienixs het volgende:
Ben ondertussen de cplusplus tutorial aan het doornemen maar vroeg me af of er online boeken/documentatie beschikbaar is met opdrachten.
En of jullie misschien tutorials weten in de richting van bioinformatica?
Dit alles doe ik in Xcode en moet zeggen dat tot nu toe alles nog vlekkeloos werkt
Eh die staat hier: http://msdn.microsoft.com/en-us/library/ms683171(v=VS.85).aspxquote:The cursor position determines where characters written by the WriteFile or WriteConsole function, or echoed by the ReadFile or ReadConsole function, are displayed. To determine the current position of the cursor, use the GetConsoleScreenBufferInfo function.
ik krijg bij het compileren een fout melding:quote:Op zondag 4 juli 2010 16:56 schreef Cruise.Elroy het volgende:
Beetje googlen en je hebt het zo gevonden:
Op MSDN, zoeken naar SetConsoleCursorPosition:
http://msdn.microsoft.com/en-us/library/ms686025(VS.85).aspx
En dan halverwege de tekst:
[..]
Eh die staat hier: http://msdn.microsoft.com/en-us/library/ms683171(v=VS.85).aspx
1 |
1 2 3 4 5 | GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),myInfo); COORD myCoord = myInfo.dwCursorPosition; myCoord.X -=3; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),myCoord); |
Het is niet zo duidelijk, maar kijk goed naar het type en de naam van de tweede parameter:quote:BOOL WINAPI GetConsoleScreenBufferInfo(
__in HANDLE hConsoleOutput,
__out PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
);
1 2 3 4 5 | GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&myInfo); COORD myCoord = myInfo.dwCursorPosition; myCoord.X -=3; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),myCoord); |
Hèhè,quote:Op maandag 5 juli 2010 08:22 schreef Cruise.Elroy het volgende:
Ik zie het al, jij maakt een pointer aan die je niet initialiseert en die geef je mee aan de functie. Die pointer moet wijzen naar een struct waar Get....() zijn info in kan zetten. De "juiste" code is dus:
[ code verwijderd ]
Ik heb van myInfo een struct gemaakt ipv een pointer en deze reference ik naar een pointer met de -& opearator in de functieaanroep. (in mijn vorige post schreef ik myCoord, maar ik bedoelde natuurlijk myInfo)
De error die je kreeg sloeg op de regel waar je dus met een . operator pointer probeerde te benaderen in regel 3.
Dit is best wel basic stuff, misschien moet je je even inlezen in pointers, stack variabelen etc.
Omdat??quote:
Je compiler is gewoon hard-coded om PE-headers te compileren, inclusief ondersteuning voor platform-specifieke communicatie met de HAL. Volgens mij declareer je in de PE-header ook de communicatiekanalen naar je OS mbh functie-tabellen enzo, die via de exe-loader worden ingevuld.quote:Op zondag 1 augustus 2010 22:30 schreef TeringHenkie het volgende:
Wat ik me altijd heb afgevraagd: als je een Win32 programma compileert, vertel je tegen de linker/compiler/whatever dat het een .exe in PE formaat is. Je bent in het feite code aan het produceren die tegen de HAL praat. Maar als je een Linux kernel compileert, wat voor een code komt er dan uit? Wat is je target platform?
Dus als je een kernel bakt, compileer je puur tegen de CPU aan (met een of andere compilerflagje). Je bent dan alleen maar registertjes aan het vullen en interrupts aan het callen? (mooi gewrapt in C-codequote:Op zondag 1 augustus 2010 22:35 schreef Cruise.Elroy het volgende:
[..]
Je compiler is gewoon hard-coded om PE-headers te compileren, inclusief ondersteuning voor platform-specifieke communicatie met de HAL. Volgens mij declareer je in de PE-header ook de communicatiekanalen naar je OS mbh functie-tabellen enzo, die via de exe-loader worden ingevuld.
Linux heeft geen PE-type executables, maar ELF's.quote:Op zondag 1 augustus 2010 22:30 schreef TeringHenkie het volgende:
Wat ik me altijd heb afgevraagd: als je een Win32 programma compileert, vertel je tegen de linker/compiler/whatever dat het een .exe in PE formaat is. Je bent in het feite code aan het produceren die tegen de HAL praat. Maar als je een Linux kernel compileert, wat voor een code komt er dan uit? Wat is je target platform?
I know, maar het ging me meer om de compiler vs. kernel dan om het OS zelf. Welke optie geef je mee aan gcc om een kernel te bakken ipv. een (ELF-)binary?quote:Op zondag 1 augustus 2010 23:09 schreef Trollface. het volgende:
[..]
Linux heeft geen PE-type executables, maar ELF's.
Pak de makefile erbij, zou ik zeggenquote:Op zondag 1 augustus 2010 23:10 schreef TeringHenkie het volgende:
[..]
I know, maar het ging me meer om de compiler vs. kernel dan om het OS zelf. Welke optie geef je mee aan gcc om een kernel te bakken ipv. een (ELF-)binary?
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
[CSS] voor dummies #15quote:Op donderdag 5 augustus 2010 16:23 schreef Pakspul het volgende:
Waarom werkt tekst transparantie in de volgende situatie niet?
[ code verwijderd ]
Zoals te zien is dat bij de eerste div situatie de tekst gewoon mooi wit is, maar bij de twee is de tekst ineens roodachtig ook al zou je anders verwachten
Als je totaal niet oplet dan lijkt Annemarie Jorritsma ook op Chantal Janzenquote:Op donderdag 5 augustus 2010 16:23 schreef Pakspul het volgende:
C++ lijkt een beetje op CSS als je totaal niet oplet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | int _tmain(int argc, _TCHAR* argv[]) { int (*fpoint)(int) = doeietsmetgetal; cout << fpoint(5); return 0; } int doeietsmetgetal(int x){ int * y = new int(x*5); return *y; } |
En hoe zorg ik ervoor dat y geen geheugen meer inneemt? Niet aanroepen met new? En hoe delete ik m'n fpoint? Of moet ik dan van die doeietsmetgetal functie gewoon een class maken? En mag ik aannemen dat zodra een variabele die zonder new is gedeclareerd verwijderd wordt zodra de functie exit?quote:Op donderdag 5 augustus 2010 18:10 schreef thabit het volgende:
*y blijft inderdaad geheugen innemen omdat je new aanroept. Ook als je *fpoint wel zou kunnen verwijderen, dan blijven alle *y instanties gewoon geheugen innemen.
Ok en m'n functiepointer? Valt die gewoon te verwijderen? Of moet ik 'm dan in de scope van een functie zien te proppen?quote:Op donderdag 5 augustus 2010 18:35 schreef thabit het volgende:
Locale (niet-static) variabelen van functies worden op de stack aangemaakt, en die stackruimte wordt vrijgegeven als je de functie verlaat. De pointer y wordt dus ook vrijgegeven, maar niet de int *y waar hij naar verwijst. Ook is fpoint een functiepointer, dus gewoon een locale variabele die wordt verwijderd zodra je de functie verlaat. In het bovenstaande voorbeeld kun je beter
int y = x*5; return y;
doen, of zelfs direct return x*5;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class Point{ unsigned short X,Y; public: Point(unsigned short x,unsigned short y):X(x),Y(y) {} unsigned short get_X(){return X;} unsigned short get_Y(){return Y;} }; class Shape{ public: virtual void Rotate(int)=0; virtual void Draw()=0; virtual bool is_Closed()=0; }; class Circle:public Shape{ Point _CENTER; unsigned _RADIUS; void Rotate(int); public: Circle(Point p,unsigned r):_CENTER(p),_RADIUS(r){} void Draw(); bool is_Closed(){return true;} }; } |
1 2 3 4 5 6 7 | int main(){ shp::Circle myCircle(shp::Point(40,20),5); //myCircle.Draw(); return 0; } |
1 2 | collect2: ld returned 1 exit status |
Dat is toch raar want Circle zou toch gewoon een virtual table moeten hebben aangezien zijn base class puur virtueel is?quote:Op vrijdag 6 augustus 2010 13:56 schreef Cruise.Elroy het volgende:
even een recompile ofzo? hij zegt dat Circle geen virtual table heeft, en blijkbaar ergens niet als derived class is gedefinieerd?
Geen idee verder.
Hmm... daar heb je idd een puntquote:Op vrijdag 6 augustus 2010 14:44 schreef thabit het volgende:
Hij is public in Shape. Dus als je een object van type Shape hebt, en weet niet wat voor Shape het is, moet je wel Rotate erop kunnen aanroepen. Maar goed, dat terzijde.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #define SHAPE_H namespace shp{ class Point{ unsigned short X,Y; public: Point(unsigned short x,unsigned short y):X(x),Y(y) {} unsigned short get_X(){return X;} unsigned short get_Y(){return Y;} }; class Shape{ public: virtual void Rotate(int)=0; virtual void Draw()=0; virtual bool is_Closed()=0; }; class Polygon:public Shape{ public: bool is_Closed(){return true;} }; class Circle:public Shape{ Point _CENTER; unsigned _RADIUS; public: Circle(Point p,unsigned r):_CENTER(p),_RADIUS(r){} void Rotate(int); void Draw(); bool is_Closed(){return true;} }; } #endif |
Ja, iknow ik heb geen .cpp file maar die heb ik voor classes toch ook niet nodig??quote:
Hehe, daar kwam ik idd ook net achter...quote:Op vrijdag 6 augustus 2010 15:18 schreef thabit het volgende:
Dan zit daar dus het probleem: de functies Circle::Rotate en Circle::Draw zijn alleen gedeclareerd, maar niet gedefinieerd. Dat vindt de linker niet zo grappig (vandaar ook een 'ld' error: het compilen gaat op zich goed, alleen het linken wil niet).
Maar hij roept Rotate en Draw niet aanquote:Op vrijdag 6 augustus 2010 15:18 schreef thabit het volgende:
Dan zit daar dus het probleem: de functies Circle::Rotate en Circle::Draw zijn alleen gedeclareerd, maar niet gedefinieerd. Dat vindt de linker niet zo grappig (vandaar ook een 'ld' error: het compilen gaat op zich goed, alleen het linken wil niet).
C++ is geen Python.quote:Op vrijdag 6 augustus 2010 15:23 schreef TeringHenkie het volgende:
[..]
Maar hij roept Rotate en Draw niet aan
jepquote:Op vrijdag 6 augustus 2010 15:31 schreef Cruise.Elroy het volgende:
Wel rare error voor een linkerfout. Maar is het nu gefixed?
hoe zo als reference dan? kost dan minder resources?quote:Op vrijdag 6 augustus 2010 15:25 schreef thabit het volgende:
Nog wat algemene opmerkingen: als je een base class aanmaakt, waar je classes van wilt afleiden, is het raadzaam om ook de destructor virtual te maken. En in de constructor van Circle kun je Point beter als reference doorgeven dan als value.
Da's een kwestie van economie: goede hardware is tegenwoordig goedkoper dan een goede programmeur.quote:Op vrijdag 6 augustus 2010 18:39 schreef progje het volgende:
Echt schijtziek word ik er van, totaal geen computer kennis meer...
Wat maakt het nou uit hoe het geheugen werkt, je propt er toch gewoon een extra bankje bij als het te traag wordt
Nou, als de salaris-eis nou ook eens in overeenstemming was met het gewenste niveau..quote:Op vrijdag 6 augustus 2010 18:46 schreef thabit het volgende:
[..]
Da's een kwestie van economie: goede hardware is tegenwoordig goedkoper dan een goede programmeur.
Ik neem aan dat een C++ programmeur wel meer verdient dan iemand die formpjes in elkaar klikt in C#?quote:Op vrijdag 6 augustus 2010 18:49 schreef progje het volgende:
[..]
Nou, als de salaris-eis nou ook eens in overeenstemming was met het gewenste niveau..
Maar dat laat helaas ook nog vaak te wensen over.
En allemaal zo heerlijk groot ego, ze vinden zichzelf allemaal de beste en overleggen ho maar
verder ben ik niet gefrustreerd hoor.
Nu werk ik zelf in een omgeving waar ook veel in .Net en C# wordt geprogrammeerd, misschien hoort het ook wel bij dat wereldje ik weet het niet..
Ja daar was ik al bang voorquote:Op vrijdag 6 augustus 2010 18:10 schreef Cruise.Elroy het volgende:
Euh? Nee want met #include wordt de file direct in je parser geramd. Dus dat later weer undo-en is niet te doen.
#include zet de inhoud van de file direct tussen je code, het is niet zoals in Java e.d.
Je kan dus een losse regel code in een file zetten, en deze dan includen midden in een functie bijvoorbeeld
Uiteindelijk is elk programma in elke taal op het Windows platform uiteindelijk een wrapper voor de Win32 api, er is geen andere logische manier om Windows "te gebruiken". Hoe hoger het niveau, hoe beter (voor de user) maar (mogelijk) trager.quote:Op vrijdag 6 augustus 2010 21:16 schreef TeringHenkie het volgende:
Grappig is trouwens wel dat de Assemblies van Microsoft gewoon wrappers om Win32 zijn. Bijvoorbeeld Messagebox.Show roept uiteindelijk gewoon MessageBox aan in user32.dll. Als iets niet kan in C#, is er nog geen developer daar die er een wrapper voor heeft geschreven.![]()
Conclusie: C# voor de GUI, en de snelle/geavanceerde code stop je in een c++ DLL die je dan DllImport
Als je met handgeschreven stiekem optimaal bedoelt, dan ja. Handgeschreven ASM is vaak alles behalve optimaal. Niet zo gek als je de intel procs zien icm 8086 ASM.quote:Op zondag 8 augustus 2010 21:38 schreef Trollface. het volgende:
Handgeschreven ASMdaar kan geen compiler tegenop
Ik ben nou eenmaal gekquote:Op zondag 8 augustus 2010 21:56 schreef Cruise.Elroy het volgende:
[..]
Als je met handgeschreven stiekem optimaal bedoelt, dan ja. Handgeschreven ASM is vaak alles behalve optimaal. Niet zo gek als je de intel procs zien icm 8086 ASM.
Vaak kan je met C# talen snelheidswinst halen omdat tight loops run-time herschreven worden naar gelang de variabelen. Natuurlijk kan je dit zelf gaan schrijven in ASM, maar dan ben je echt gek.
Dat C# sneller kan zijn dan C++ snap ik wel, maar dan is dat (neem ik aan) alleen maar omdat OF je code brakker is, OF omdat je compiler niet kan optimaliseren. Het probleem met C# is alleen dat je voor de eenvoudigste dingen meteen 3 objecten aan moet gaan maken, wat je waarschijnlijk veel geheugen en cpu-tijd kost.quote:Op zondag 8 augustus 2010 21:24 schreef Cruise.Elroy het volgende:
[..]
Uiteindelijk is elk programma in elke taal op het Windows platform uiteindelijk een wrapper voor de Win32 api, er is geen andere logische manier om Windows "te gebruiken". Hoe hoger het niveau, hoe beter (voor de user) maar (mogelijk) trager.
Dat het anders kan laten Linux ports en Java apps zien, maar daar wordt je echt niet blij van, al is het alleen al het gebruikersgemak, al custom dialogs en lelijke L&F.
Verder kan C# zeker wel sneller zijn dan C++, zelfs sneller dan compiled ASMdat komt omdat je stukken (byte)code real-time opnieuw kan compilen naar ASM als de omstandigheden daar toe zijn.
Je code draait gewoon op je CPU, waar anders opquote:Op zondag 8 augustus 2010 22:16 schreef TeringHenkie het volgende:
[..]
Dat C# sneller kan zijn dan C++ snap ik wel, maar dan is dat (neem ik aan) alleen maar omdat OF je code brakker is, OF omdat je compiler niet kan optimaliseren. Het probleem met C# is alleen dat je voor de eenvoudigste dingen meteen 3 objecten aan moet gaan maken, wat je waarschijnlijk veel geheugen en cpu-tijd kost.
Hoe zit dat nou met de machinecode die uitgevoerd wordt? Ik heb begrepen dat moderne OSen een HAL om je hardware heen bouwen. Mag ik dan ook aannemen dat machinecode wel direct op je processor draait, en dat er alleen interrupts aangeroepen mogen worden die opgevangen worden door je HAL?
Low-level programming is mijn dingquote:Op zondag 8 augustus 2010 22:19 schreef Cruise.Elroy het volgende:
[..]
Je code draait gewoon op je CPU, waar anders opAlleen kan je met Protected Mode etc. heel veel dingen afschermen, zoals interrupts, geheugenadressen etc. Een HAL is een low-level variant van een API.
Dat snap ik, maar de windows kernel mag niet hetzelfde als de HAL, en een applicatie mag niet hetzelfde als de kernel. Hoe wordt dat afgeschermd? Interrupts die worden afgevangen/geblokkeerd oid?quote:Op zondag 8 augustus 2010 22:19 schreef Cruise.Elroy het volgende:
[..]
Je code draait gewoon op je CPU, waar anders opAlleen kan je met Protected Mode etc. heel veel dingen afschermen, zoals interrupts, geheugenadressen etc. Een HAL is een low-level variant van een API.
Dat ik bij FOK! dev wil niet zeggen dat ik alleen aan webdevving doequote:
Nee maar iemand die low-level zit te hacken (quote:Op zondag 8 augustus 2010 22:29 schreef Trollface. het volgende:
[..]
Dat ik bij FOK! dev wil niet zeggen dat ik alleen aan webdevving doe
Je weet toch dat dat een snel in elkaar geflanst stukje code is wat in de praktijk niets doet?quote:Op zondag 8 augustus 2010 22:32 schreef Cruise.Elroy het volgende:
[..]
Nee maar iemand die low-level zit te hacken () is normaal niet iemand die webdevving echt kan waarderen.
En je ASM is niet echt geweldig. nm, de mijne is ook kut
Dat bedoel ik dus. Wat ik eerst niet snapte, was dat ALLE code op je PC uiteindelijk ook op de CPU stacks zit te pushen en weet ik veel. Hoe zorg je dat dat allemaal niet in de weg zit? Ik neem aan dat als een ander proces CPU-tijd krijgt, jouw registertjes ergens worden opgeslagen, en die andere code z'n waardes weer in de registertjes wordt gestoptquote:Op zondag 8 augustus 2010 22:30 schreef Cruise.Elroy het volgende:
Afaik wordt dat idd met interrupts en dergelijke geregeld. Sowieso heb je je eigenlijk geheugen-ruimtes waardoor je niet meer bij iedereen kan rondkijken.
Details o.a. hier:
Dit is de processor-side info: http://en.wikipedia.org/wiki/Protected_mode
En hier heb je de verschillende permissie-"rings": http://en.wikipedia.org/wiki/Ring_(computer_security)
Multi-threading en multi-tasking doet zogenaamde context-switching die alles dus idd keurig weg zet. Interrupts e.d. ook natuurlijk:quote:Op zondag 8 augustus 2010 22:36 schreef TeringHenkie het volgende:
[..]
Dat bedoel ik dus. Wat ik eerst niet snapte, was dat ALLE code op je PC uiteindelijk ook op de CPU stacks zit te pushen en weet ik veel. Hoe zorg je dat dat allemaal niet in de weg zit? Ik neem aan dat als een ander proces CPU-tijd krijgt, jouw registertjes ergens worden opgeslagen, en die andere code z'n waardes weer in de registertjes wordt gestopt
HA! Dus eigenlijk was DOS wel een systeem wat multitasking aankon. Immers zouden drivers hun werk nooit kunnen doenquote:Op zondag 8 augustus 2010 22:38 schreef Cruise.Elroy het volgende:
[..]
Multi-threading en multi-tasking doet zogenaamde context-switching die alles dus idd keurig weg zet. Interrupts e.d. ook natuurlijk:
http://en.wikipedia.org/wiki/Context_switch
Multitasking is in principe sowieso een must op een OS.quote:Op zondag 8 augustus 2010 22:46 schreef TeringHenkie het volgende:
[..]
HA! Dus eigenlijk was DOS wel een systeem wat multitasking aankon. Immers zouden drivers hun werk nooit kunnen doen
Waarom zou je multi-tasking nodig hebben voor drivers? Die hoeven toch niet los van een applicatie iets uit te voeren?quote:Op zondag 8 augustus 2010 22:46 schreef TeringHenkie het volgende:
[..]
HA! Dus eigenlijk was DOS wel een systeem wat multitasking aankon. Immers zouden drivers hun werk nooit kunnen doen
Volgens mij heb ik hier de broncode van MS DOS 5.0 nog liggen, maar ik heb geen zin om hem door te spitten.quote:Op zondag 8 augustus 2010 23:00 schreef Cruise.Elroy het volgende:
[..]
Nee in DOS werkte alle(?) drivers met interrups, TSR systemen en ingeladen stukken uitvoerbare code. Geen multi-tasking dus.
Maar hoe werkte dat dan als je de muis bewoog? Of als je netwerkkaart data ontving? Werd die pas uit de buffer gehaald als je programma polde of de socket data te verwerken had?quote:Op zondag 8 augustus 2010 23:00 schreef Cruise.Elroy het volgende:
[..]
Waarom zou je multi-tasking nodig hebben voor drivers? Die hoeven toch niet los van een applicatie iets uit te voeren?
Nee in DOS werkte alle(?) drivers met interrups, TSR systemen en ingeladen stukken uitvoerbare code. Geen multi-tasking dus.
Een muis-driver registereerde een stuk code ergens in een interrupttabel (oid), maar die driver voerde dus zelf geen code uit "los" van de applicatie. Die applicatie riep gewoon driver-code aan waar nodig, en wachtte tot deze klaar was.
Als je code wilde uitvoeren "samen" met een applicatie moest je een timer-interrupt aanzette die gewoon elke zoveel ms triggerde en dan jouw code weer uitvoerde. Zoals een trainer van games bijv. Een programma die in het geheugen ligt te wachten totdat hij wordt uitgevoerd heet een TSR.
http://en.wikipedia.org/wiki/Terminate_and_Stay_Resident
Volgens mij is dit niet helemaal waar. Als ik in C# een object aanmaak, maakt het framework voor mij een object aan, dat doet de code niet zelf. Ook neem het framework mij GC uit handen. Als ik in C++ een object aanmaak, maakt mijn eigen code voor mij geheugen aan (in een door windows bepaalde geheugenruimte weliswaar). Als voorbeeld: als ik twee ints optel, doet mijn C++ programma dat gewoon in de registers, zonder tussenkomst van een of andere DLL.quote:Op zondag 8 augustus 2010 21:24 schreef Cruise.Elroy het volgende:
[..]
Uiteindelijk is elk programma in elke taal op het Windows platform uiteindelijk een wrapper voor de Win32 api, er is geen andere logische manier om Windows "te gebruiken".
Dat is ook de rede dat zware-/besturingsprogramma's doorgaans in C++ geschreven zijnquote:Op zondag 8 augustus 2010 23:56 schreef TeringHenkie het volgende:
[..]
Volgens mij is dit niet helemaal waar. Als ik in C# een object aanmaak, maakt het framework voor mij een object aan, dat doet de code niet zelf. Ook neem het framework mij GC uit handen. Als ik in C++ een object aanmaak, maakt mijn eigen code voor mij geheugen aan (in een door windows bepaalde geheugenruimte weliswaar). Als voorbeeld: als ik twee ints optel, doet mijn C++ programma dat gewoon in de registers, zonder tussenkomst van een of andere DLL.
Wat is volgens jou het verschl tusen "framework" en "code"? Een C# gaat echt geen DLL gebruiken om ints op te tellen. Het aanmaken van een object gaat ook op eenzelfde manier als in C++, hetzij met iets meer boekhouding. De lijn tussen framework runtime en je "eigen code" is flinterdun, en de compiler zal ze ook gewoon doorelkaar heen compileren.quote:Op zondag 8 augustus 2010 23:56 schreef TeringHenkie het volgende:
[..]
Volgens mij is dit niet helemaal waar. Als ik in C# een object aanmaak, maakt het framework voor mij een object aan, dat doet de code niet zelf. Ook neem het framework mij GC uit handen. Als ik in C++ een object aanmaak, maakt mijn eigen code voor mij geheugen aan (in een door windows bepaalde geheugenruimte weliswaar). Als voorbeeld: als ik twee ints optel, doet mijn C++ programma dat gewoon in de registers, zonder tussenkomst van een of andere DLL.
C# compileert dat gewoon tot snoeiharde ASMquote:Op maandag 9 augustus 2010 00:13 schreef netolk het volgende:
[..]
Dat is ook de rede dat zware-/besturingsprogramma's doorgaans in C++ geschreven zijn
Maar doet C# dat met tussenkomst van DLL's?? Dat zou behoorlijk inefficiënt zijn
Al die info stond op je hardware te wachten totdat je het pollde ja. Dat is in Windows nog steeds zo; een driver is geen process, dat zou erg raar zijn.quote:Op zondag 8 augustus 2010 23:08 schreef TeringHenkie het volgende:
[..]
Maar hoe werkte dat dan als je de muis bewoog? Of als je netwerkkaart data ontving? Werd die pas uit de buffer gehaald als je programma polde of de socket data te verwerken had?
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.bij de raw data copy (die while(!Read.eof()) loop) komt ie nooit aan bij end of file en krijg ik dus een oneindig groot ico file... weet iemand miss wat ik niet goed doeBeware of the Raping Zebra's
quote:Op woensdag 25 augustus 2010 12:23 schreef netolk het volgende:
Hey, ik heb problemen met het maken van een ico...
ik heb op http://www.hackerfactor.c(...)-Ico-Ico-Un-Day.html en op http://en.wikipedia.org/wiki/BMP_file_format gekeken, maar nu werkt de volgende code niet...Kijk eens naar de functies seekg en read van fstream. Houd er verder rekening mee dat je structs goed gepacked (dus dat iedere char maar 1 byte inneemt ipv 4)SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.bij de raw data copy (die while(!Read.eof()) loop) komt ie nooit aan bij end of file en krijg ik dus een oneindig groot ico file... weet iemand miss wat ik niet goed doe
nou op een gegeven moment leest ie alleen maar het zelfde getal uit...quote:Op donderdag 26 augustus 2010 11:25 schreef Cruise.Elroy het volgende:
Wat lees je dan uit, zet die zooi op het scherm en kijk waar het mis gaat. Toch niet zo enorm moeilijk?
nee iets van 236825 ofzo het maakte niet uit of ik binary las en schreef of niet bleef het zelfde getal krijgen...quote:Op donderdag 26 augustus 2010 12:44 schreef Cruise.Elroy het volgende:
Je moet ook geen << operator gebruiken bij binary streams. Je wilt gewoon byte-voor-byte die data ophalen en wegschrijven met read en write. Als hij nog maar 1 getal uitleest, welke is dat dan? -1 ofzo?
Gebruik je nog steeds << ? Want die moet je dus _niet_ gebruiken voor dit soort dingenquote:Op donderdag 26 augustus 2010 15:08 schreef netolk het volgende:
[..]
nee iets van 236825 ofzo het maakte niet uit of ik binary las en schreef of niet bleef het zelfde getal krijgen...
Probleem is opgelost... Had eerst mn struct maar eens even in C++ geschreven in plaats van die windows meuk met byte enzo en daar hadden ze arrays dus dacht nou dat kan dan ook wel in 1 variabele maar dat kan dus niet XDquote:Op donderdag 26 augustus 2010 16:18 schreef Cruise.Elroy het volgende:
[..]
Gebruik je nog steeds << ? Want die moet je dus _niet_ gebruiken voor dit soort dingen
edit: ik zie dat je hele grote getallen krijgt, dus je bent niet byte voor byte binair aan het lezen. Dat moet je wel doen aangezien een BMP/ICO file vol zit met binaire troep.
Gooi dat getal er eens in HEX uit, misschien iets van 0xFFFF of 0x8000: een of andere errorwaarde.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | for(int i = 0; i < argc; i++){ // tijdelijk std::cout << argv[i] << '\n'; } if(argc > 1){ if(argc == 2){ if(argv[1] == "/?"){ std::cout << '\n' << argv[0] << " [bitmap 1] etc. \n\n"; std::cout << "[bitmap] File location of a bitmap (*.bmp)\n"; std::cout << "/? Program help\n"; } } return 0; } |
1 2 | /? |
umja dat klopte idd ook niet maar het is niet de oplossing ik compile overigens met g++ niet dat dat uit zou moeten maken maar tochquote:
1 |
1 2 3 4 5 6 7 8 | { for (int x = 0; str1[x] != 0 || str2[x] != 0; x++) { if (str1[x] != str2[x]) return false; } return true; } |
Dit klinkt idd logisch had ik zelf nog niet aan gedachtquote:Op zaterdag 28 augustus 2010 13:44 schreef Cruise.Elroy het volgende:
netolk, je bent bekend met de string-zero opslag in C++ neem ik aan?
Een string sla je dus op als een reeks char's, en je point dan naar het begin van de string. het einde van de string wordt aangegeven met een nul (als character kan je het schrijven als '\0')
Als je dus twee strings wilt vergelijken moet je dus het volgende doen:
[ code verwijderd ]
deze lus loopt de beide strings af totdat er een verschil wordt gevonden, of totdat ze beide tegelijk aflopen. Oh en deze methode is niet optimaal en zit wss vol fouten, gebruik daarom de ingebouwde strcmp() functie.
Of gebruik de std::string klasse uit de STL lib van C++, maar mss leuk om precies te weten wat je doet.
Ik laat hem een tijdelijk object aanmaken voor het if-statement gebeurenquote:Op zondag 29 augustus 2010 15:33 schreef Cruise.Elroy het volgende:
Vergeet niet dat je bij elke string() call wel een stukje geheugen alloceert etc. Als je met std::string werkt, probeer dan zo snel mogelijk (en 1-malig) alle inkomende char* naar strings te converteren, en werk daarna met const string& referenties (of pointers) om zo het onnodig aanmaken van strings te voorkomen.
Niet dat je daarmee in de problemen zal komen, tenzij je echt tijdkritieke code gaat schrijven.
1 2 3 | //code } |
ja dat mag, maar kijk uit voor bijv:quote:Op maandag 30 augustus 2010 23:35 schreef netolk het volgende:
[..]
Ik laat hem een tijdelijk object aanmaken voor het if-statement gebeuren
zoiets als dit
[ code verwijderd ]
1 2 3 4 | else if (std::string(bla) == "hoi1") func_hoi1(); else if (std::string(bla) == "hoi2") func_hoi2(); else if (std::string(bla) == "hoi3") func_hoi3(); |
1 2 3 4 5 | if (blastr == "hoi") func_hoi0(); else if (blastr == "hoi1") func_hoi1(); else if (blastr == "hoi2") func_hoi2(); else if (blastr == "hoi3") func_hoi3(); |
1 |
Top dan kan ik het gewoon zo laten staan dusquote:Op donderdag 2 september 2010 11:12 schreef Cruise.Elroy het volgende:
ja ik had het nagezocht, en dat is idd zo. Vergeet niet dat std::string een specialisatie is van std::basicstring<> maar deze heeft nog extra functies om handig met de "ouderwetse" string0s uit C om te kunnen gaan
[ code verwijderd ]
quote:Op donderdag 2 september 2010 14:37 schreef Cruise.Elroy het volgende:
Dat kan sowieso, als je er 20.000 per seconde gaat doen, dan wordt het pas een issue
hmm.. oke bedankt in ieder gevalquote:Op maandag 20 september 2010 13:11 schreef Cruise.Elroy het volgende:
Nee, niet makkelijk volgens mij. Bijna alle standaard I/O is min of meer console-achtig.
Wat je kan doen is een frame-workje ergens downloaden die cross-platform is en die dingen goed wrapt.
Trollquote:Op maandag 20 september 2010 15:32 schreef thabit het volgende:
C++ is dan ook meer een verzameling hacks bij elkaar dan een echte programmeertaal.
quote:Op maandag 20 september 2010 15:32 schreef thabit het volgende:
C++ is dan ook meer een verzameling hacks bij elkaar dan een echte programmeertaal.
quote:
Dit klopt allemaal, maar dat komt gewoon omdat de taal op een bepaald abstractieniveau zit. Maakt de taal niet slecht, gewoon krachtiger maar minder geschikt voor RAD.quote:Op maandag 20 september 2010 23:04 schreef thabit het volgende:
Face it, mensen: het is niet goed porteerbaar, het heeft geen geheugenmanagement met garbage collector, het heeft geen goede ingebouwde ondersteuning voor parallelisatie. t Is eigenlijk gewoon een verkapte assembly en alleen handig voor kleine libraryfuncties die tot op de bit geoptimaliseerd moeten zijn en real-time applicaties en games waar elke ms telt en geheugen vaak de halve GB net haalt.
quote:Op dinsdag 21 september 2010 13:29 schreef Cruise.Elroy het volgende:
[..]
Dit klopt allemaal, maar dat komt gewoon omdat de taal op een bepaald abstractieniveau zit. Maakt de taal niet slecht, gewoon krachtiger maar minder geschikt voor RAD.
1 2 3 | netdb.h netinet/in.h |
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.Weet iemand hoe ik deze code onder Windows kan laten werken?
PS. Ik gebruik de mingw compiler...Beware of the Raping Zebra's
Oke bedankt ik zal eens even een beetje gaan kloten met die winsock header en kijken of ik er wat uit kan krijgen...quote:Op woensdag 22 september 2010 21:47 schreef Cruise.Elroy het volgende:
Onder Windows kan je winsock.h gebruiken, werkt nagenoeg hetzelfde, maar je zal hier en daar wat calls moeten versleutelen.
Nou ik ben eerst maar begonnen met het volgen van een tut ipv dat example te draaienquote:Op donderdag 23 september 2010 10:08 schreef Cruise.Elroy het volgende:
Nog gelukt? Want winsock zou redelijk gelijk moeten zijn aan de standaard berkley sockets interface, zeker voor simpele apps.
http://en.wikipedia.org/wiki/Berkeley_sockets
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include "windows.h" #include "iostream" #include "stdlib.h" #include "winsock.h" #include "assert.h" int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsadata; int result = WSAStartup(MAKEWORD(2,2), &wsadata); //using winsock version 2.2 assert(result == 0); SOCKET listener; listener = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in localip; localip.sin_family = AF_INET; localip.sin_addr.s_addr = inet_addr("127.0.0.1"); localip.sin_port = htons(12345); result = (bind(listener, (SOCKADDR*) &localip, sizeof(localip))); assert(result == 0); listen(listener, SOMAXCONN); SOCKET incoming; incoming = accept(listener, NULL, NULL ); int error = WSAGetLastError(); assert(incoming != INVALID_SOCKET); closesocket(listener); // close listener, no longer needed, otherwise could be used again char buffer[100]; while (1) { int bytesreceived = recv(incoming, buffer, sizeof(buffer), 0); if (buffer[0] == 'x') break; send(incoming, buffer, bytesreceived, 0); } WSACleanup(); return 0; } |
Ja dat klopt idd het is nu opgelost maar ik kan nergens een duidelijk lijstje vinden van de fout codes van WSAGetLastError()...quote:Op zaterdag 25 september 2010 19:53 schreef Cruise.Elroy het volgende:
Ja dat zal je toch echt even zelf moeten debuggen, ik denk dat de client gewoon de verbinding verbreekt zodra hij verbinding heeft gemaakt. Iig een program-flow fout van jouw kant waarschijnlijk.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |