visual c++ win32 array size

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hallo
ik ben net begonnen met visueel programmeren in c++
hiervoor programmeerde ik alleen in c
nu heb ik alleen een vraagje
als je een textbox aanmaakt hoe kan je dan de array size achterhalen
dit grapje werkt helaas niet
while((i<16)&&(sizeof (regel1->Text)/sizeof(regel1->Text[0]))>i)
{
i++;
enz
}
dit doorloopt die altijd maar 2 keer ongeacht de lengte van het array
als ik dit dan weg haal
&&(sizeof (regel1->Text)/sizeof(regel1->Text[0]))>i
werkt het goed zolang het array maar minimaal 16 members heeft
is dit kleiner krijg ik een error dat ik geheugen probeer te benaderen wat ik niet mag benaderen
hoe los ik dit nu op?

Acties:
  • 0 Henk 'm!

  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
Als je de Win32 API gebruikt (ik neem aan van wel), zou je WM_GETTEXTLENGTH kunnen versturen naar je edit window.

Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

enne MSDN: GetWindowText function

maaar wat is regel1 voor een type/object ? heeft die geen functie method om de lengte te bepalen?

[ Voor 29% gewijzigd door leuk_he op 14-04-2012 22:37 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bedankt voor de reacties ik heb gewoon 3 keer over TextLength
op deze pagina heen gelezen
MSDN: TextBox Class (System.Windows.Forms)

Acties:
  • 0 Henk 'm!

  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 09-09 17:18
Verwijderd schreef op zaterdag 14 april 2012 @ 22:46:
bedankt voor de reacties ik heb gewoon 3 keer over TextLength
op deze pagina heen gelezen
MSDN: TextBox Class (System.Windows.Forms)
Die link is een reference naar het .NET framework, jij gebruikt C++ en hebt niets aan de info op die pagina?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
sorry als ik me verkeerd verwoord heb
maar ik heb de info indd van die pagina af gehaald
alleen had ik de eerste 3 keer dat ik keek te snel gekeken en had ik over de functie TextLength heen gekeken.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:35
Verwijderd schreef op zaterdag 14 april 2012 @ 22:23:
... als je een textbox aanmaakt hoe kan je dan de array size achterhalen ....
De 'array size' achterhalen kan niet in C++, net zo min als in C. Je kunt wel de lengte van de string opvragen, net als in C.

Dus sizeof is hier niet op zijn plaats ...

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dat trukje wat ik toepaste werkt normaal wel in c en in het boek c++ grand cru staat het ook vermeld
wat je doet is je bepaald de totale grote van het array en je deelt dat door de grote van 1 element.

Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Verwijderd schreef op zaterdag 14 april 2012 @ 23:03:
dat trukje wat ik toepaste werkt normaal wel in c en in het boek c++ grand cru staat het ook vermeld
wat je doet is je bepaald de totale grote van het array en je deelt dat door de grote van 1 element.
Maar in een C++ string object wordt de waarde opgeslagen in een stukje dynamisch memory. Je kunt wel de pointer naar die buffer opvragen. vergelijk het met een null termintated string in C, die kun je bepalen met strlen, niet met de sizeof de buffer waarin die is opgeslagen, die wijkt af.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nu je het zegt indd in c is dat hetzelfde als malloc en free inderdaad

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:35
Verwijderd schreef op zaterdag 14 april 2012 @ 23:03:
dat trukje wat ik toepaste werkt normaal wel in c en in het boek c++ grand cru staat het ook vermeld
wat je doet is je bepaald de totale grote van het array en je deelt dat door de grote van 1 element.
Ik weet niet welk truukje dat zou moeten zijn, maar deze code:
C++:
1
 .. sizeof( regel1->Text ) / sizeof( regel1->Text[0] ) ) ...

levert waarschijnlijk altijd 2 op omdat je de grootte van *een pointer* ( en dus niet de grootte van een array ) deelt door de grootte van een TCHAR.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

farlane schreef op zondag 15 april 2012 @ 12:55:
[...]

Ik weet niet welk truukje dat zou moeten zijn, maar deze code:
C++:
1
 .. sizeof( regel1->Text ) / sizeof( regel1->Text[0] ) ) ...

levert waarschijnlijk altijd 2 op omdat je de grootte van *een pointer* ( en dus niet de grootte van een array ) deelt door de grootte van een TCHAR.
kuch... 64 bit pointers... 2 byte of 1 byte chararcters.. (ja, essetie is inderdaad dat het een sizeof(pointer) oplevert, maar je berekening zit anders in elkaar)

[ Voor 9% gewijzigd door leuk_he op 15-04-2012 13:19 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

de sizeof truc werkt enkel voor stack/global arrays, omdat sizeof() dan weet waar je het over hebt:
C++:
1
2
3
4
5
int arr[10];
int sz = sizeof(arr) / sizeof(arr[0]); //10

int *foo = new int[10]; //of: int *foo = (int *)malloc(10 * sizeof(int));
int foosz = sizeof(foo) / sizeof(foo[0]); //1 of 2, maar geen 10


Maar dit heeft echt niets met de TS te maken, hij heeft het over een System.Window.Forms.Textbox, wat een managed object is, en de lengte van de tekst daarin is inderdaad op te halen op andere manieren (een managed string heeft ook nog gewoon een Length property trouwens).

Mocht het toch C(++) zijn: std::string heeft een length() en size() die dit oplossen, en een c-stijl string hebben we strlen() voor.

[ Voor 40% gewijzigd door MLM op 15-04-2012 13:38 ]

-niks-


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bedankt voor alle reacties dat probleem is opgelost
nu loop ik alleen tegen het volgende aan
data die naar de com poort word gestuurd vang ik zo op

ontvangen->Text += "";
ontvangen->Text += serialPort1->BytesToRead;
ontvangen->Text +="opd " ;
ontvangen->Text +=(serialPort1->ReadChar());
ontvangen->Text +="\r\n";
ontvangen->Text +="waarde ";
ontvangen->Text +=(serialPort1->ReadChar());
ontvangen->Text +="\r\n";
als ik eerst iets zend en dan meteen die code neer zet gaat het goed

maar hoe krijg ik het nu zo dat de data constand word uit gelezen en niet alleen als ik op een knop druk.
ik heb al geprobeerd om het in een background worker te zetten.
maar het lijkt er op dat die niet start

Acties:
  • 0 Henk 'm!

  • Broken
  • Registratie: Maart 2004
  • Laatst online: 19-09 15:45
Vrij simpel :). (evil laugh)

Je kan een aparte thread maken die eens in de zoveel tijd kijkt of er data in de buffer zit. Of je doet het op interrupt basis.

Voor beiden gevallen raad ik je aan toch eerst wat meer in de basis te verdiepen. Dan zul je zien dat dit soort concepten veel makkelijker zelf op te lossen zijn.

Ik heb namelijk het idee dat je C/C++/C# door elkaar het gebruiken bent.

01101000 01100101 01101100 01110000


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:35
leuk_he schreef op zondag 15 april 2012 @ 13:16:
kuch... 64 bit pointers... 2 byte of 1 byte chararcters.. (ja, essetie is inderdaad dat het een sizeof(pointer) oplevert, maar je berekening zit anders in elkaar)
Ik heb het origineel van je post niet gezien maar wat probeer je duidelijk te maken?
MLM schreef op zondag 15 april 2012 @ 13:33:
de sizeof truc werkt enkel voor stack/global arrays, omdat sizeof() dan weet waar je het over hebt:
....
Maar dit heeft echt niets met de TS te maken, hij heeft het over een System.Window.Forms.Textbox, wat een managed object is, en de lengte van de tekst daarin is inderdaad op te halen op andere manieren
...
Het heeft er alles mee te maken want als je de code schrijft die hij schrijft heb je iets van de basis nog niet helemaal gesnapt. Had hij dat wel dan had hij deze code niet geschreven.

Hoe weet je eigenlijk dat het hier gaat om een managed tekstbox object?

[ Voor 49% gewijzigd door farlane op 16-04-2012 11:48 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
op het inlezen van de data die ik terug krijg na heb ik het programma helemaal af
heeft iemand misschien een turtorial hoe je van uit een sub proces een Windows form kan benaderen?
dan kan ik het programmatie af maken

Acties:
  • 0 Henk 'm!

  • Broken
  • Registratie: Maart 2004
  • Laatst online: 19-09 15:45
Je krijgt allemaal tips, heb je daar iets mee gedaan???

01101000 01100101 01101100 01110000


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

farlane schreef op maandag 16 april 2012 @ 11:44:
[...]

Ik heb het origineel van je post niet gezien maar wat probeer je duidelijk te maken?
Jij zegt dat het altijd 2 is. Ik denk dat leuk_he probeert duidelijk te maken dat het nogal afhangt van de grootte van je pointer (tegenwoordig typisch 4 of 8 bytes) en de grootte van een karakter (TCHAR is een char of een wchar_t, afhankelijk van je compiler opties). Het antwoord kan dus 2, 4 of 8 zijn.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:35
.oisyn schreef op woensdag 18 april 2012 @ 12:38:
Jij zegt dat het altijd 2 is. Ik denk dat leuk_he probeert duidelijk te maken dat het nogal afhangt van de grootte van je pointer (tegenwoordig typisch 4 of 8 bytes) en de grootte van een karakter (TCHAR is een char of een wchar_t, afhankelijk van je compiler opties). Het antwoord kan dus 2, 4 of 8 zijn.
De TS zegt dit in zijn TS:
.... dit doorloopt die altijd maar 2 keer ongeacht de lengte van het array...
Ik bedoelde dus niet dat dat altijd 2 is, maar in de situatie van de TS is dat wel het geval.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja het uitlezen van de array size heb ik al (staat ook in mijn 2de post)
het uitlezen van de compoort via een sub procces heb ik geprobeerd maar dat is het enige dat nog niet gelukt is
als ik de code onder een knop zet werkt die maar nog niet als sub procces

Acties:
  • 0 Henk 'm!

  • Broken
  • Registratie: Maart 2004
  • Laatst online: 19-09 15:45
Zoals ik al eerder had aangegeven, je hebt simpel weg 2 mogelijkheden. Scroll een stukje om hoog :)

Zou je misschien iets duidelijker kunnen aangeven wat er niet lukt, hoe en wat heb je al geprobeerd?

01101000 01100101 01101100 01110000

Pagina: 1