OVH Cloud OVH Cloud

Tableau dynamique

75 réponses
Avatar
Pierre CHAUVEAU
Bonjour à toutes et à tous,

Personnellement, je réalise mes programmes avec DELPHI (langage Pascal de
BORLAND) où sont définis des "tableaux dynamiques". Ce sont des tableaux
dont on peut fixer la taille (le nombre d'éléments) à l'exécution.

J'utilise ce type de tableaux pour échanger des infos entre un programme et
des DLL.

Existe-t-il l'équivalent, pour ne pas dire la même chose, dans d'autres
langages, notamment le C++ de chez Microsoft.

Sinon, comment faites-vous pour échanger entre .exe et .dll quand vous ne
connaissez pas à la compilation la taille des infos à échanger ;le nombre de
pixels de l'image en cours de traitement par exemple.

Merci de votre aide.

Pierre.

10 réponses

Avatar
AMcD®
Vincent Burel wrote:

PS : juste pour voir si vraiment il reste des troller sur ce
newsgroup :-)



Mouarf. À peine...

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
Pierre CHAUVEAU
Je suis désolé d'avoir lancé cette polémique. Cependant, au travers des
réponses, j'ai cru comprendre qu'il était possible en C++ de créer des
tableaux dynamiques.

Je vais aller un peu plus loin, je suis dans la DLL qui vient de recevoir le
tableau dynamique (créé dans le programme .exe) et j'ai besoin de connaître
sa taille. Avec DELPHI (Pascal objet), je n'ai pas besoin qu'on me
transmette sa taille car je peux la connaître en faisant :

Taille:= Length(Tableau_Dynamique);

Peut-on en faire autant en C++ ou bien le créateur du tableau doit-il aussi
me transmettre sa taille ? Pouvez-vous me donner un exemple de code C++ ?

Si cela peut aider, mon but est le suivant :

Dans un .exe, je charge une image et je crée un tableau dynamique dont la
taille est le nombre de pixels de l'image. Je transmet ce tableau à diverses
DLL pour que chacune d'elles me fasse un traitement spécifique sur cette
image. Bien évidemment, mon programme peut charger plusieurs images et
chacune d'elles peut avoir une taille différente.

Merci de votre aide.

Pierre.

"Pierre CHAUVEAU" a écrit dans le message de
news:4193f1ed$0$10631$
Bonjour à toutes et à tous,

Personnellement, je réalise mes programmes avec DELPHI (langage Pascal de
BORLAND) où sont définis des "tableaux dynamiques". Ce sont des tableaux
dont on peut fixer la taille (le nombre d'éléments) à l'exécution.

J'utilise ce type de tableaux pour échanger des infos entre un programme


et
des DLL.

Existe-t-il l'équivalent, pour ne pas dire la même chose, dans d'autres
langages, notamment le C++ de chez Microsoft.

Sinon, comment faites-vous pour échanger entre .exe et .dll quand vous ne
connaissez pas à la compilation la taille des infos à échanger ;le nombre


de
pixels de l'image en cours de traitement par exemple.

Merci de votre aide.

Pierre.




Avatar
Alexandre
bonjour,

C'est les nazes qui programment sans vérifier les retours de fonctions...



soit 99% des programmeurs... Tu vérifies EN PERMANENCE dans ton code le
retour de new ? Que c'est lourd !

2) malloc renvoie un void* donc pas de typage fort du pointeur.
Tu est obligé de faire un cast "sauvage" (statique, quoi) et souvent
ça masque des futurs problèmes...



Mouarf, quel problème puis-je avoir à cause d'un void* ?



struct C1 { /*....*/ };
struct C2 {/*....*/}; autre objet de taille différente



C1* ptr_mal_alloue = (C1*)malloc(sizeof(C2)); // AIE AIE !!!
une simple faute de frappe fait courir au programme un gros risque...



Déjà le gars il à qu'a coder proprement genre PC1 au lieu de C1*, ce sera
plus lisible. Ensuite, utiliser des noms plus explicites et il ne fera pas
ce genre d'erreur.



j'ai pris des noms simples pour ne pas avoir à taper trop... Evidemment,
mais l'erreur existe aussi avec des noms bien choisis.

Note que le transtypage sauvage comme tu l'appelles a son intérêt pour
certaines choses. C'est parfois utile de faire croire à un BYTE qu'il est
un CHAR :-).



ce qui n'est pas un transtypage, si BYTE est défini comme un alias de CHAR.

Mais non. C'est tout simplement inutile en C++ de coder un tableau
dynamique puisque ça existe déjà.



Sur ce point, tu as entièrement raison.



c'est déjà ça, merci ;-)

--
AMcD®

http://arnold.mcdonald.free.fr/



Avatar
Alexandre
> Ben ça dépend de quel compilo tu utilises, de quel genre de code tu écris.
Moi, en C ou ASM, il m'arrive souvent de déclarer simplement une zone de
mémoire et... de choisir ensuite si c'est des BYTE, WORD, LONG, objets,
caractères ou je ne sais quoi. Cela dépend de tellement de choses...



Je rappelle une partie fort utile de ma phrase : En C++, new est préférable
à malloc.

La programmation c'est pas un art guidé par des dogmes et des oeillères.
Tu ne peux pas dire c'est comme ça et pas autrement. Il y a tellement de
domaines d'application, de domaines, de contextes particuliers...



D'où l'emploi du terme "préférable" . Je n'ai pas dit "QUOI ? UTILISER UN
MALLOC QUEL HORREUR"

http://arnold.mcdonald.free.fr/



Avatar
Alexandre
bonjour,

C'est une confusion classique chez les "pseudo-programmeur" C++, je le
répète donc, le NEW en C++ sert à hinstancier, créer et déclencher l'appel
du constructeur d'un object de type C++. le Malloc est une fonction qui
permet d'allouer de la mémoire. Donc, il n'y a pas grand rapport avec ces
deux fonctions, ou plutot fonctionnalités, car "malloc" est une fonction
d'un librairie, "new" est un mot réservé du langage...



merci pour le pseudo-programmeur, un jour je te dirais où je travailles.
new sert effectivement à instancier (pas de h ici, ne pas confondre avec une
hInstance) un objet, mais également à allouer de la mémoire. Donc comme
malloc, mais en mieux (par ex déclenchement d'une exception en cas de pb).

En C++ l'utilisation d'un std::vector est préférable à un new pour faire


un
tableau dynamique.



Ce choix là, vous regarde, ceci dit le NEW ne peut pas servir à faire un
tableau dynamique, il peut éventuellement servire à hinstancier un objet
de
gestion de tableau dynamique, voire hinstancier les objets qui seront
stocker dans un tableau dynamique... Mais encore une fois vous faites
confusion. C'est comme si je disais, "New sert à faire un jeu vidéo".



pas confusion. Raccourci. Je ne vais pas tout redétailler à chaque fois.
Le conseil intelligent à donner à un débutant, ce n'est pas de faire des
malloc pour gérer un tableau dont la taille varie, c'est d'utiliser
std::vector. Il va gagner un temps énorme.


VB






Avatar
Alexandre
bonjour (soir ?)

"Pierre CHAUVEAU" a écrit dans le message de
news: 419794ee$0$22049$
Je suis désolé d'avoir lancé cette polémique. Cependant, au travers des
réponses, j'ai cru comprendre qu'il était possible en C++ de créer des
tableaux dynamiques.



oui, en utilisant par exemple std::vector. Oublies les bagarres de clocher
entre malloc et new, ça n'a aucun interet dans ton cas.

Je vais aller un peu plus loin, je suis dans la DLL qui vient de recevoir
le
tableau dynamique (créé dans le programme .exe) et j'ai besoin de
connaître
sa taille. Avec DELPHI (Pascal objet), je n'ai pas besoin qu'on me
transmette sa taille car je peux la connaître en faisant :

Taille:= Length(Tableau_Dynamique);

Peut-on en faire autant en C++ ou bien le créateur du tableau doit-il
aussi
me transmettre sa taille ? Pouvez-vous me donner un exemple de code C++ ?



les 2 sont possibles.
Quand tu crées un vecteur (un tableau dynamique) tu peux spécifier sa taille
au départ (mais elle peut changer ensuite)

std::vector<float> Tab(50); // crée un tableau de 50 float, non
initialisés. 50 peut être remplacé par une variable.
Tab.size() donne la taille (le nombre d'éléments) donc ici, 50.
Tab.resize(60) porte la taille du tableau à 60 éléments. Les 50 premiers
sont inchangés, les 10 suivants ne sont pas initialisés.



Si cela peut aider, mon but est le suivant :

Dans un .exe, je charge une image et je crée un tableau dynamique dont la
taille est le nombre de pixels de l'image. Je transmet ce tableau à
diverses
DLL pour que chacune d'elles me fasse un traitement spécifique sur cette
image. Bien évidemment, mon programme peut charger plusieurs images et
chacune d'elles peut avoir une taille différente.



donc ton tableau c'est grosso modo ton image ?
std::vector conviendra alors, tu peux te permettre te regarder la doc de ton
compilo sur cette classe.


Merci de votre aide.

Pierre.

"Pierre CHAUVEAU" a écrit dans le message de
news:4193f1ed$0$10631$
Bonjour à toutes et à tous,

Personnellement, je réalise mes programmes avec DELPHI (langage Pascal de
BORLAND) où sont définis des "tableaux dynamiques". Ce sont des tableaux
dont on peut fixer la taille (le nombre d'éléments) à l'exécution.

J'utilise ce type de tableaux pour échanger des infos entre un programme


et
des DLL.

Existe-t-il l'équivalent, pour ne pas dire la même chose, dans d'autres
langages, notamment le C++ de chez Microsoft.

Sinon, comment faites-vous pour échanger entre .exe et .dll quand vous ne
connaissez pas à la compilation la taille des infos à échanger ;le nombre


de
pixels de l'image en cours de traitement par exemple.

Merci de votre aide.

Pierre.








Avatar
Alexandre
et au fait, suite du fil préférable sur fr.comp.lang.c++ qui sera plus
adapté (aucun rapport avec la programmation windows sur ce sujet précis du
tableau dynamique en C++)
Avatar
Pierre CHAUVEAU
Oui, effectivement. Mon réflexe basique étant "Windows" puisque je crois que
le langage principal de programmation y est le C++. Mais tu as entièrement
raison, je vais aller sur ce forum.

Merci.

Pierre.

"Alexandre" a écrit dans le message de
news:4197b506$0$30305$
et au fait, suite du fil préférable sur fr.comp.lang.c++ qui sera plus
adapté (aucun rapport avec la programmation windows sur ce sujet précis du
tableau dynamique en C++)




Avatar
AMcD®
Alexandre wrote:
bonjour,

C'est les nazes qui programment sans vérifier les retours de
fonctions...



soit 99% des programmeurs... Tu vérifies EN PERMANENCE dans ton code
le retour de new ? Que c'est lourd !



??? Bah, à peine que je vérifie les valeurs retournées par les fonctions !
Et après ont s'étonne que les programmes plantent... Rien d'étonnant si les
99% des programmeurs raisonnent comme toi.

Dis-moi, et si ton new() plante, puisque tu ne vérifie pas, je suis curieux
de savoir comment tu poursuis ton programme...

Il n'y a pas de lourdeur dans le sérieux et la rigueur mon ami.

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
AMcD®
Alexandre wrote:

merci pour le pseudo-programmeur, un jour je te dirais où je
travailles.



Ben moi qui suis pourtant réputé pour mon humour spécial et ma grande
gueule, je pense qu'il vaut mieux que tu ne le dises pas où tu travailles...
Si t'as des gars un peu sérieux et rigoureux au-dessus de toi, quand ils
vont lire des morceaux d'anthologie du style :

"Tu vérifies EN PERMANENCE dans ton code le retour de new ? Que c'est lourd
!"

c'est ta place que tu joues... Moi, si j'étais patron d'une boîte et qu'un
programmeur me sort ça, c'est la remontée de bretelle assurée mon gars ! Au
minimum ça te vaudrait que j'aille avec grande inquiètude jeter un oeil dans
ton code et vu tes "concepts" philosophiques tu serais vite en position de
départ pré-ANPE...

PS : T'inquiète pas, je suis pas patron de société de logiciel :-).

--
AMcD®

http://arnold.mcdonald.free.fr/