Prb tableau de Byte !!! Help !!!

cs_gluk Messages postés 43 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 25 avril 2008 - 25 janv. 2006 à 10:58
ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 - 29 janv. 2006 à 16:47
Bonjour,

J'ai un problème avec dans mon apprentissage du C++.



J'aimerai créée une méthode de classe capable de renvoyer un tableau d'octet
( à la manière d'un buffer de lecture ).



Je me tape la tête contre les murs tellement j'ai essayé de solutions.

J'y arrive très bien en Csharp.



Code Csharp :

function byte[] lectureBuffer(){

byte[] buffer = new byte[1024];

code....;

return buffer;

}



Voila, super simple en Csharp mais pas évidemment en C++ .



Si vous avez une solution ou même un exemple sur la lecture de buffer je suis
preneur.




Gluk

8 réponses

dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
25 janv. 2006 à 11:14
byte* lectureBuffer()
{
byte* buffer = new byte[1024];
// ton code
return buffer;
}
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 janv. 2006 à 11:18
BYTE *pmem;
pmem = (BYTE*) VirtualAlloc(....);
return pmem;

je ne vois pas le problème, à part que je déconseille tant que faire se peut. Le prog appelant alloue sa mémoire, passe le pointeur à la fonction et est responsable de sa desalloc, ça occasionne moins de fuites mémoire.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
cs_gluk Messages postés 43 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 25 avril 2008
25 janv. 2006 à 11:26
Merci dark_naruto25,

Mais j'ai 3 questions :

- Le code t'elle qu'il se presente, peut'il etre integré en méthode de classe ?

- byte est-il un dériver de char en C++ ?

- Peut tu me fournir un exemple de code appelant ?



J'illustre ma demande par du code Csharp :

MonObjetQuiLit oLecture = new MonObjetQuiLit (sPath);

While( oLecture.JePeuxLire ){

Byte[] oByte = oLecture.LireBuffer(); <- code appelant

}


Merci pour le code ci-dessus .


Gluk
0
cs_gluk Messages postés 43 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 25 avril 2008
25 janv. 2006 à 11:52
Merci BruNews,

Mais je ne comprend pas le fonctionnement de VirtualAlloc



La ligne "pmem = (BYTE*) VirtualAlloc(....);" est pour moi un mystère .



Je suis conscient de demandé quelque chose de très simple, mais ça vas faire un
petit moment que je bloc sur ce problème .



Gluk
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 janv. 2006 à 12:00
Il ne faut jamais mettre devant soi de l'interprété et chercher à le refaire en C/C++ sinon tu produiras peut-être encore plus mauvais et lent.
Tu écris en bon gaulois le but à obtenir et ensuite transcription en code.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
25 janv. 2006 à 17:54
VirtualAlloc est une fonction qui alloue de la mémoire (comme new, malloc, HeapAlloc, ....) sauf que c'est une fct de l'API windows.
un BYTE est un unsigned char et ne dérive pas d'un type (les types de bases ne sont pas des classes).

Je rejoint Brunews sur le fait que transcrire un code d'un language à un autre est pas conseillé. il vaut mieux partir de ce que doit faire le code
0
cs_gluk Messages postés 43 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 25 avril 2008
25 janv. 2006 à 21:06
Merci pour vos réponses.

Je suis d'accord, bien évidemment. On peut voir ce genre de confusion dans la
migration de gros projet.

J'ai illustré mes propos avec du code Csharp car c'est assez proche d’un pseudo
code (ou gaulois).

Si j'ai bien compris VirtualAlloc ne fonctionne QUE sous Windows est pas sous Linux
?

Si c'est le cas je vais essayer de faire autrement, car j'ai bien envie (une
fois mon programme fini) de le compiler sur Windows et Linux.

<!--[if !supportLineBreakNewLine]-->

<!--[endif]-->




Voici mon le code C++ :






Dans la méthode de classe







char * readFile(){




int
iSizeLastBloc = this->_lSizeFile - ((this->_lNumBloc - 1) *
this->_iSizeBuffer);




char
biteReadEnd[iSizeLastBloc];




//*-*-* a
verifier




*biteReadEnd
= this->_oBufferRead[(this->_iIndexNumBloc * this->_iSizeBuffer)];




this->_lNumBloc++;




this->_bState
= false;




return biteReadEnd;

}







dans l’appelant :







do{




char*
oBuffer;




oBuffer
=oCutter.readFile();




fwrite(oBuffer,
sizeof(oBuffer), 1, oFile);




}




while(oCutter.getState());







Voila mon vrais problème, c’est que je récupère une adresse
est pas le contenue du tableau.




Si vous avez une option ou même un exemple je suis preneur.






Gluk
0
ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 2
29 janv. 2006 à 16:47
Salut !
oBuffer est un pointeur, donc une adresse. Mais tu peut l'utiliser en tableau. Si le tableau que tu a remplit contient "bonjour" oBuffer[0] contient 'b', oBuffer[1] contient 'o', ect...
0