abonnement Unibet Coolblue Bitvavo
pi_84941323
Die destructor maak je virtual zodat hij (automatisch) kan worden aangeroepen als je afgeleide klassen destruct. Anders krijg je later evt. memory leaks (hoeft eigenlijk alleen als je destructor echt iets doet maar het is wel goed om het aan te leren)

En ja, als reference heb je iets minder resources maar in dit geval maakt het niet heel veel uit.
  vrijdag 6 augustus 2010 @ 18:07:12 #202
189216 netolk
maar dan andersom
pi_84947213
ik heb nog een vraagje bestaat er ook iets als #exclude? aangezien je wel #define en #undef hebt...
Beware of the Raping Zebra's
pi_84947322
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 :)
pi_84948288
echt, cruise.elroy, jij weet tenminste echt waar je over praat.. O+

Ik word echt doodmoe van alle programmeurs waarmee ik al heb moeten werken en die, zodra ze hun database connectie niet kunnen instellen via een Wizard, niet weten hoe het moet :')

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 :')
"Wie niet gelooft in wonderen, is geen realist."
pi_84948486
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 :')
Da's een kwestie van economie: goede hardware is tegenwoordig goedkoper dan een goede programmeur.
pi_84948619
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.
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 :r

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..
"Wie niet gelooft in wonderen, is geen realist."
pi_84952114
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 :r

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..
Ik neem aan dat een C++ programmeur wel meer verdient dan iemand die formpjes in elkaar klikt in C#?
pi_84952820
Hehe ja dat zeker.. :)

Maar ik ken ook genoeg Senior C#/asp.net programmeurs die er werkelijk waar geen drol van begrijpen..
En toch ook een salaris verdienen van in de 4000 euro, maar ja

Al hebben we ook eens een Senior C++ programmeur in dienst gehad en ik begreep er destijds (als junior) al meer van dan hij :') Maar ja die heb je er altijd tussen zitten he.
"Wie niet gelooft in wonderen, is geen realist."
pi_84954344
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. _O-

Conclusie: C# voor de GUI, en de snelle/geavanceerde code stop je in een c++ DLL die je dan DllImport :P
  vrijdag 6 augustus 2010 @ 23:32:28 #210
189216 netolk
maar dan andersom
pi_84960271
quote:
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 :)
Ja daar was ik al bang voor :P, ik dacht miss kan het dus als je in een header a header b include dan kan je dus overal waar a geinclude word ook die van b gebruiken...
Beware of the Raping Zebra's
pi_85023483
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. _O-

Conclusie: C# voor de GUI, en de snelle/geavanceerde code stop je in een c++ DLL die je dan DllImport :P
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. :X

Verder kan C# zeker wel sneller zijn dan C++, zelfs sneller dan compiled ASM :o dat komt omdat je stukken (byte)code real-time opnieuw kan compilen naar ASM als de omstandigheden daar toe zijn.
  zondag 8 augustus 2010 @ 21:38:07 #212
254493 Trollface.
gr rob fruithof, groningencity
pi_85024137
Handgeschreven ASM _O_ daar kan geen compiler tegenop *)
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85025114
quote:
Op zondag 8 augustus 2010 21:38 schreef Trollface. het volgende:
Handgeschreven ASM _O_ daar kan geen compiler tegenop *)
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.
  zondag 8 augustus 2010 @ 22:00:15 #214
254493 Trollface.
gr rob fruithof, groningencity
pi_85025316
quote:
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.
Ik ben nou eenmaal gek :P
__asm__ {} _O_
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85025672
Zonde van je tijd :N ik schrijf eigenlijk alleen maar zware time-critical code en zelfs ik gebruik het eigenlijk nooit. Er is eigenlijk altijd wel een meer (dev)tijd-efficientere manier om snelheid te winnen.
  zondag 8 augustus 2010 @ 22:09:23 #216
254493 Trollface.
gr rob fruithof, groningencity
pi_85025783
push eax
push ecx
mov al, 0
mov cl, 5
:lp1
add al, cl
dec cl
or cl, cl
jnz lp1
pop ecx
pop eax

:P
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85026104
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. :X

Verder kan C# zeker wel sneller zijn dan C++, zelfs sneller dan compiled ASM :o dat komt omdat je stukken (byte)code real-time opnieuw kan compilen naar ASM als de omstandigheden daar toe zijn.
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?
pi_85026133
@ ASM
Tof, maar je code doet niets nuttigs, doet dit bijzonder efficient, en reset zijn waardes aan het einde. :D
pi_85026255
quote:
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?
Je code draait gewoon op je CPU, waar anders op :D Alleen kan je met Protected Mode etc. heel veel dingen afschermen, zoals interrupts, geheugenadressen etc. Een HAL is een low-level variant van een API.
  zondag 8 augustus 2010 @ 22:20:42 #220
254493 Trollface.
gr rob fruithof, groningencity
pi_85026321
quote:
Op zondag 8 augustus 2010 22:19 schreef Cruise.Elroy het volgende:

[..]

Je code draait gewoon op je CPU, waar anders op :D Alleen kan je met Protected Mode etc. heel veel dingen afschermen, zoals interrupts, geheugenadressen etc. Een HAL is een low-level variant van een API.
Low-level programming is mijn ding :Y
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85026438
Waarom ben je dan een webdevver? :D
pi_85026608
quote:
Op zondag 8 augustus 2010 22:19 schreef Cruise.Elroy het volgende:

[..]

Je code draait gewoon op je CPU, waar anders op :D Alleen 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?
  zondag 8 augustus 2010 @ 22:29:55 #223
254493 Trollface.
gr rob fruithof, groningencity
pi_85026765
quote:
Op zondag 8 augustus 2010 22:23 schreef Cruise.Elroy het volgende:
Waarom ben je dan een webdevver? :D
Dat ik bij FOK! dev wil niet zeggen dat ik alleen aan webdevving doe :P
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85026779
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)
pi_85026863
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 :P
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
  zondag 8 augustus 2010 @ 22:33:38 #226
254493 Trollface.
gr rob fruithof, groningencity
pi_85026927
De kernel doet o.a. ook zelf interrupts afhandelen dus user-kernelspace kan door de kernel bewaakt worden. :)
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
  zondag 8 augustus 2010 @ 22:34:37 #227
254493 Trollface.
gr rob fruithof, groningencity
pi_85026966
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
Je weet toch dat dat een snel in elkaar geflanst stukje code is wat in de praktijk niets doet? :P

Oh, en ik ben begonnen met webdevven :P ik discrimineer over het algemeen niet mits er een uitdaging in zit. :)
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85027080
quote:
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)
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 :P
pi_85027164
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 :P
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
pi_85027496
quote:
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
HA! Dus eigenlijk was DOS wel een systeem wat multitasking aankon. Immers zouden drivers hun werk nooit kunnen doen :P
  zondag 8 augustus 2010 @ 22:48:46 #231
254493 Trollface.
gr rob fruithof, groningencity
pi_85027626
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 :P
Multitasking is in principe sowieso een must op een OS. :)
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85028301
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 :P
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
  zondag 8 augustus 2010 @ 23:02:28 #233
254493 Trollface.
gr rob fruithof, groningencity
pi_85028402
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.
Volgens mij heb ik hier de broncode van MS DOS 5.0 nog liggen, maar ik heb geen zin om hem door te spitten. :P
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85028740
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
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?
pi_85031259
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".
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.
  maandag 9 augustus 2010 @ 00:13:07 #236
189216 netolk
maar dan andersom
pi_85032204
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.
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
Beware of the Raping Zebra's
pi_85037660
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.
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.
GC is wel een andere issue, maar ook deze is enorm geoptimaliseerd en zal niet via DLL wrappers lopen. Wat ik bedoelde was dat alle IO-functies (key-handling, files, audio, video) allemaal via de Win32 API lopen, in elke applicatie.
pi_85037665
quote:
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
C# compileert dat gewoon tot snoeiharde ASM
pi_85037672
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?
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.
  woensdag 25 augustus 2010 @ 12:23:26 #240
189216 netolk
maar dan andersom
pi_85683673
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...
SPOILER
Om 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
Beware of the Raping Zebra's
pi_85683865
Hier kun je beter gewoon de file-I/O-functies van C gebruiken in plaats van die streamzooi van C++.
pi_85685297
Met operator>> zit je volgens mij formatted data in te lezen, gebruik gewoon getc() oid. Ik weet niet waarom eof() niet triggert, maar ik gebruik het te weinig...

gooi in je read loopje een std::cout die de char output die net gelezen is (even casten naar int zodat je de waarde krijgt) dan zie je vanzelf waar het fout gaat. Ik kan me voorstellen dat hij bijv. een integer probeert te lezen in binaire stream vol willekeurige bytes, dan leest ie steeds 0 bytes uit als het niet begint met '0' - '9'
pi_85698949
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...
SPOILER
Om 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
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)
  donderdag 26 augustus 2010 @ 10:35:42 #244
189216 netolk
maar dan andersom
pi_85721067
Het maakt niet uit wat ik doe of ik unformatted data lees of unsigned int/char lees hij blijft in een oneindige loop en geeft geen end of file aan...
Beware of the Raping Zebra's
pi_85722849
Wat lees je dan uit, zet die zooi op het scherm en kijk waar het mis gaat. Toch niet zo enorm moeilijk?
  donderdag 26 augustus 2010 @ 12:17:38 #246
189216 netolk
maar dan andersom
pi_85724731
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?
nou op een gegeven moment leest ie alleen maar het zelfde getal uit...

Ik dacht probeer eerst een een ico te lezen maar daar krijg ik ook allemaal rare code uit dus die structs zullen wel weer eens niet kloppen :( nouja dat bekijk ik later wel weer
Beware of the Raping Zebra's
pi_85725544
Die streams die zien het gewoon als een string ofzo. Dus als je de int 1234 op een stream zet met <<, dan zet hij er in feite de string "1234" erop (denk ik). Dat hele streamgebeuren in C++ is geen verbetering ten opzichte van C. (Sowieso kun je voor dit soort simpele file-conversies beter Python gebruiken, maar dat terzijde).
pi_85725807
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?
  donderdag 26 augustus 2010 @ 15:08:35 #249
189216 netolk
maar dan andersom
pi_85732185
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?
nee iets van 236825 ofzo het maakte niet uit of ik binary las en schreef of niet bleef het zelfde getal krijgen...
Beware of the Raping Zebra's
pi_85734858
quote:
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...
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.
  donderdag 26 augustus 2010 @ 17:05:43 #251
189216 netolk
maar dan andersom
pi_85736579
quote:
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.
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 XD

Bedankt iedereen nu kan ik een ICO tenminste lezen, en moet schrijven ook niet zo moeilijk meer zijn...
Beware of the Raping Zebra's
pi_85741249
Euh ok, logisch. ;)
  vrijdag 27 augustus 2010 @ 23:38:46 #253
189216 netolk
maar dan andersom
pi_85792252
kan iemand mij uitleggen waarom dit niet werkt??
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(int argc,char *argv[]){
    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;
}
als ik mn programma nu aanroep met CreateICO.exe /? dan krijg ik het volgende te zien:
1
2
CreateICO.exe
/?
maar dus niet het gedeelte dat in het if-statement staat...

EDIT: code foutje

[ Bericht 0% gewijzigd door netolk op 27-08-2010 23:44:59 ]
Beware of the Raping Zebra's
pi_85792372
if(argc = 2) moet if(argc == 2) zijn
  vrijdag 27 augustus 2010 @ 23:45:54 #255
189216 netolk
maar dan andersom
pi_85792574
quote:
Op vrijdag 27 augustus 2010 23:41 schreef thabit het volgende:
if(argc = 2) moet if(argc == 2) zijn
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 toch

zo doet ie het overigens wel
1if(argv[1][0] == '/' && argv[1][1] == '?')
Maar dit word een error als je maar 1 digit mee geeft...
EDIT: vind ik niet netjes geprogrammeerd en volgens mij zou het bovenste gewoon moeten werken

[ Bericht 19% gewijzigd door netolk op 28-08-2010 00:07:48 ]
Beware of the Raping Zebra's
pi_85793889
O ja, C heeft geen strings, dus dat zijn dan pointers. Om strings te vergelijken kun je de string klasse van C++ gebruiken. string(argv[0]) == string(argv[1])
  zaterdag 28 augustus 2010 @ 00:21:36 #257
189216 netolk
maar dan andersom
pi_85794114
ja, nu werkt het idd wel bedankt thabit :)
Beware of the Raping Zebra's
pi_85804994
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:
1
2
3
4
5
6
7
8
bool compareStrings(const char* str1, onst char* str2)
{
  for (int x = 0; str1[x] != 0 || str2[x] != 0; x++)
  { 
    if (str1[x] != str2[x]) return false;
  }
  return true;
}
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.
  zondag 29 augustus 2010 @ 00:25:21 #259
189216 netolk
maar dan andersom
pi_85821591
quote:
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.
Dit klinkt idd logisch had ik zelf nog niet aan gedacht :) maar ik heb voor het makkelijkke maar gewoon de std::string gebruikt
Beware of the Raping Zebra's
pi_85834415
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. :)
  maandag 30 augustus 2010 @ 23:35:08 #261
189216 netolk
maar dan andersom
pi_85894240
quote:
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. :)
Ik laat hem een tijdelijk object aanmaken voor het if-statement gebeuren

zoiets als dit
1
2
3
if(std::string(argv[1]) == "/?"){
  //code
}
Beware of the Raping Zebra's
pi_85895610
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 ]


ja dat mag, maar kijk uit voor bijv:

1
2
3
4
if (std::string(bla) == "hoi") func_hoi0();
else if (std::string(bla) == "hoi1") func_hoi1();
else if (std::string(bla) == "hoi2") func_hoi2();
else if (std::string(bla) == "hoi3") func_hoi3();
maak er dan van:
1
2
3
4
5
std::string blastr = std::string(bla);
if (blastr == "hoi") func_hoi0();
else if (blastr == "hoi1") func_hoi1();
else if (blastr == "hoi2") func_hoi2();
else if (blastr == "hoi3") func_hoi3();
Ik weet niet wat de operator==() van std::string allemaal accepteert, het zou zelfs kunnen zijn dat hij de rechterkant ook steeds naar strings zit om te zetten voordat ie vergelijkt.
  donderdag 2 september 2010 @ 07:10:47 #263
189216 netolk
maar dan andersom
pi_85975023
volgens mij accepterend string ook (const) char strings
Beware of the Raping Zebra's
pi_85978540
Elke keer als je a == b doet, dan wordt de methode operator== van a uitgevoerd, met b als input. Dus a.operator==(b) wordt dan uitgevoerd. Nu zal dat in elk geval voor een const string& b gedefinieerd zijn, maar waarschijnlijk dus ook voor een const char* b.
pi_85979145
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 ;)
1typedef basic_string<char> string;
  donderdag 2 september 2010 @ 14:26:49 #266
189216 netolk
maar dan andersom
pi_85985153
quote:
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 ]

Top dan kan ik het gewoon zo laten staan dus :P
Beware of the Raping Zebra's
pi_85985506
Dat kan sowieso, als je er 20.000 per seconde gaat doen, dan wordt het pas een issue ;)
  donderdag 2 september 2010 @ 21:17:52 #268
189216 netolk
maar dan andersom
pi_85999381
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 ;)
:P nee dat was ik niet van plan XD maar ik wil wel zo efficiënt mogelijke code schrijven
Beware of the Raping Zebra's
pi_85999503
Premature optimization is the root of all evil.
pi_86013554
Ja, maar er vroeg rekening mee houden is wel heel belangrijk. :7
  zaterdag 18 september 2010 @ 10:04:25 #271
189216 netolk
maar dan andersom
pi_86564188
Is het ook mogelijk om te zien of de knoppen op je toetsenbord zijn pressed/relased zonder de Windows.h header?? Dat het progje zeg maar op elke unix systeem kan draaien
Beware of the Raping Zebra's
pi_86633431
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.
  maandag 20 september 2010 @ 15:05:50 #273
189216 netolk
maar dan andersom
pi_86637373
quote:
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.
hmm.. oke bedankt in ieder geval
Beware of the Raping Zebra's
pi_86637624
Het is trouwens echt een van de meest vervelende "features" van C++, dat je dat niet wat makkelijker kan opvragen, daardoor kan je met "standaard" C++ eigenlijk geen real-time applicaties maken. :P
pi_86638369
C++ is dan ook meer een verzameling hacks bij elkaar dan een echte programmeertaal. :P
pi_86638577
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. :P
Troll :D
  maandag 20 september 2010 @ 22:21:05 #277
189216 netolk
maar dan andersom
pi_86656356
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. :P
_O- _O-

quote:
Op maandag 20 september 2010 15:38 schreef Cruise.Elroy het volgende:
Troll :D
Beware of the Raping Zebra's
pi_86658475
Face it, mensen: het is niet goed porteerbaar, het heeft geen geheugenmanagement met garbage collector, het heeft geen goede ondersteuning voor parallelisatie (nee, pthread telt niet). 't Is eigenlijk gewoon een verkapte assembly en alleen handig voor kleine libraryfuncties die tot op de bit geoptimaliseerd moeten zijn.
pi_86658936
:')
"Wie niet gelooft in wonderen, is geen realist."
  dinsdag 21 september 2010 @ 08:10:52 #280
254493 Trollface.
gr rob fruithof, groningencity
pi_86663744
Ga eens ergens anders trollen. :')
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_86672023
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.
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.
  dinsdag 21 september 2010 @ 17:01:18 #282
189216 netolk
maar dan andersom
pi_86679606
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.
_O-
Beware of the Raping Zebra's
pi_86680690
Natuurlijk speel ik advocaat van de duivel hier, maar af en toe heb ik het idee dat de keuze van sommige mensen voor C++ als programmeertaal sterke analogieën met godsdienstwaanzin vertoont.
pi_86715081
Met zo'n advocaat moet de duivel maar hopen dat ie niet wordt aangeklaagd.
  woensdag 22 september 2010 @ 21:38:05 #285
189216 netolk
maar dan andersom
pi_86728737
Goede avond, ik kwam code tegen voor een "chat" programma'tje alleen is dit dus voor linux geschreven en mis ik de volgende headers:
1
2
3
arpa/inet.h
netdb.h
netinet/in.h
SPOILER
Om 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
pi_86729151
:o
pi_86729248
Onder Windows kan je winsock.h gebruiken, werkt nagenoeg hetzelfde, maar je zal hier en daar wat calls moeten versleutelen.
  woensdag 22 september 2010 @ 21:48:38 #288
189216 netolk
maar dan andersom
pi_86729286
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.
Oke bedankt ik zal eens even een beetje gaan kloten met die winsock header en kijken of ik er wat uit kan krijgen...
Beware of the Raping Zebra's
pi_86740639
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
  donderdag 23 september 2010 @ 20:29:21 #290
189216 netolk
maar dan andersom
pi_86763691
quote:
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
Nou ik ben eerst maar begonnen met het volgen van een tut ipv dat example te draaien
Beware of the Raping Zebra's
pi_86781998
Net even een snelle echo gedraaid met hulp van een snelle opfris door MSDN. :P
Dit programma echo'ed alles terug totdat hij een zending binnenkrijgt dat begint met 'x'.

Enige libfile die je nodig hebt is Ws2_32.lib (in Visual Studio)

Sockets zijn echt heel simpel, maar je moet het model even doorhebben van sockets en adressen:
Elke verbinding naar de buitenwereld is een socket (maken met socket())

Als je een verbinding wilt ontvangen moet je dus een aanspreekpunt hebben. Eerst koppel je een socket aan een adres. (adres = ip + port) met bind() daarna zet je hem op luisterstand met listen()
Als je zelf verbinding wilt maken gebruik je simpelweg connect()

Als een verbinding binnenkomt op je luisterende socket, kan deze verbinding worden gebruikt om een nieuwe socket te maken waar je vervolgens mee kan praten met send()/recv(). Dit doe je met accept().
accept() blijft blocken totdat er een verbinding beschikbaar is. (kan je ook anders instellen overigens)
Je luister socket blijft overigens ook gewoon doordraaien dus je kan daar steeds accept() op blijven aanroepen om nieuwe inkomende verbindingen op te vangen.

Hou ook in de gaten dat elke TCP verbinding uniek moet zijn in zijn begin- en eind-adres. dat betekent dat je dus maar 1 connectie kan hebben van een specifiek adres naar een listen socket (die een vast adres heeft). Als je een uitgaande socket aanmaakt met connect() zal het adres van dit socket ook een willekeurige port meekrijgen tenzij je daarvoor expliciet een bind hebt gedaan, zodat je meerdere verbinden kan maken naar een server vanaf 1 IP. :) Als je je netwerkverkeer zit te bekijken wat binnenkomt zal je zien dat de inkomende adressen dus allemaal rare poorten hebben. :P dat is dus by design.

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 "stdafx.h"
#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;
}
Enige tricky gedeelte van de code is evt het casten tussen SOCKADDR en sockaddr_in structs. Moet je verder niet te veel op letten, je kan in de headers gaan kijken hoe dat precies zit.

Oh en htons() en co. zijn functies om endian om te draaien etc. Er zijn ook functies om hostnamen op te zoeken (getaddrinfo()) en nog een hele reeks andere handige functies.

Let op dat windows naast de standaard socket systemen ook nog allemaal andere toevoegingen heeft gemaakt, die zijn handig maar je kan daarna dus niet makkelijk meer poorten als je die eenmaal gaat gebruiken (beginnen vaak met WSA.....)

[ Bericht 16% gewijzigd door Cruise.Elroy op 24-09-2010 12:47:18 ]
  vrijdag 24 september 2010 @ 15:24:18 #292
189216 netolk
maar dan andersom
pi_86791568
Ik heb op deze site ook een paar examples gevonden

maar die van jou is ook wel handig :P

bedankt
Beware of the Raping Zebra's
pi_86794759
Leuke site, behandeld ook Overlapped I/O op een goede manier, dat zie je idd niet vaak :Y
  vrijdag 24 september 2010 @ 18:36:48 #294
189216 netolk
maar dan andersom
pi_86799146
ik heb nu alleen het probleem... Dat example van die site dus (die rot13server) probeer ik te draaien dat werkt gewoon alleen nu heb ik een client gemaakt die daar mee kan "praten". de connect werkt gewoon client kan data verzenden maar de server kan het niet ontvangen... Weet iemand waar het aan kan liggen??

PS. als ik source code moet posten hoor ik het wel
Beware of the Raping Zebra's
pi_86816496
Is de verbinding in stand gebracht? wat zijn je error-codes voor recv()? gebruik WSAGetLastError om evt extra info te krijgen. :)
  zaterdag 25 september 2010 @ 16:35:41 #296
189216 netolk
maar dan andersom
pi_86831751
de error die WSAGetLastError geeft is 10054...
De verbinding is gemaakt ect. en de recv van de server creëert dus die error (10054)

Op internet staat dat dit de error code is dat de client de connectie verbreekt... Alleen is dit (volgens mij) niet zo

[ Bericht 31% gewijzigd door netolk op 25-09-2010 17:02:55 ]
Beware of the Raping Zebra's
pi_86838570
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. :)
  zaterdag 25 september 2010 @ 22:46:42 #298
189216 netolk
maar dan andersom
pi_86844565
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. :)
Ja dat klopt idd het is nu opgelost maar ik kan nergens een duidelijk lijstje vinden van de fout codes van WSAGetLastError()...
Beware of the Raping Zebra's
  zondag 26 september 2010 @ 00:11:04 #300
189216 netolk
maar dan andersom
pi_86847606
dankje :P
Beware of the Raping Zebra's
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')