OVH Cloud OVH Cloud

Assignation par référence d'une structure

3 réponses
Avatar
Pascal B.
Bonjour à tous,

J'ai deux structures A et B.
A est imbriquée dans B, comme définit ci-dessous:

Public Type StructureA
Reference as String
Description as String
End Type

Public Type StructureB
Definition as StructureA
Nombre as Integer
End Type

Public A as StructureA
Public B as StructureB
[...]

Si j'écris B.A = A , je crée une copie de A dans B.A.
Ce que je voudrais faire, c'est "référencer" A dans B.A,
comme on le fait avec les objets de cette manière: Set B.A = A.

Peut-on adapter ce principe aux structures ?

D'avance merci pour toutes informations,
Pascal B.

3 réponses

Avatar
Picalausa François
"Pascal B." a écrit dans le message de news:
efo%
Bonjour à tous,

J'ai deux structures A et B.
A est imbriquée dans B, comme définit ci-dessous:

<snip>

Si j'écris B.A = A , je crée une copie de A dans B.A.
Ce que je voudrais faire, c'est "référencer" A dans B.A,
comme on le fait avec les objets de cette manière: Set B.A = A.




Hello,

A moins de gérer explicitement un pointeur (As Long) vers ta structure, je
ce n'est pas *que je sache* faisable en VB.
Cela étant, y a-t-il des contraintes qui t'empêchent d'emplouer une classe
décrite de la même façon?

(Dans class ClassA:
Public Reference as String
Public Description as String

Dans ClassB:
Public Definition as ClassA
Public Nombre as Integer)

--
Picalausa François
Avatar
Pascal B.
"Picalausa François" wrote in message news:uV1rW$
| "Pascal B." a écrit dans le message de news:
| efo%
| > Bonjour à tous,
| >
| > J'ai deux structures A et B.
| > A est imbriquée dans B, comme définit ci-dessous:
| >
| > <snip>
| >
| > Si j'écris B.A = A , je crée une copie de A dans B.A.
| > Ce que je voudrais faire, c'est "référencer" A dans B.A,
| > comme on le fait avec les objets de cette manière: Set B.A = A.
| >
|
| Hello,
|
| A moins de gérer explicitement un pointeur (As Long) vers ta structure, je
| ce n'est pas *que je sache* faisable en VB.
| Cela étant, y a-t-il des contraintes qui t'empêchent d'emplouer une classe
| décrite de la même façon?
|
| (Dans class ClassA:
| Public Reference as String
| Public Description as String
|
| Dans ClassB:
| Public Definition as ClassA
| Public Nombre as Integer)
|
| --
| Picalausa François


Bonjour,

En fait, rien ne m'empêche d'utiliser des classe plutot que des structures..
C'est dommage... Dans d'autres languages, c'est possible d'assigner par référence et non par valeur....

En VB, donc, c'est vraiment pas possible ? Meme pas avec des APIs et AdressOf ????

Pascal B.
Avatar
Picalausa François
Hello,

C'est dommage... Dans d'autres languages, c'est possible d'assigner par
référence et non par valeur....



VB a été conçu pour être simple d'utilisation... c'est là toute la
difficulté ;-)

En VB, donc, c'est vraiment pas possible ? Meme pas avec des APIs et
AdressOf ????



AdressOf, non (puisqu'il s'agit de l'adresse d'une procédure).
Tu peux par contre t'allouer dynamiquement de la mémoire (HeapCreate,
HeapAlloc, HeapDestroy), d'utiliser le pointeur renvoyé comme un simple type
long et d'effectuer les modifications en mémoire à coup de CopyMemory... Ca
marchera, mais je ne pense pas qu'on puisse garantir la rapidité
d'exécution d'une telle solution (entre autre à cause du copymemory).

Tu peux aussi stoquer tes structures dans un tableau dynamique et utiliser
comme pointeur l'index du tableau correspondant à l'entrée. La seule
"difficulté" est alors de gérer ton tableau comme un arbre (avec quelques
routines bien écrites on s'en sort vite) et si nécessaire des fonctions de
compactage du tableau (le gros problème étant que ce tableau est un bloc
mémoire contigu).

On peut aussi envisager le cas d'un "tableau" d'un seul élément, remappé par
son safearray sur un pointeur donné (avec HeapCreate, ...) ce qui permet
d'avoir un temps de copymemory moins lent, en fonction du nombre de données
par structure... Ou encore effectuer toute la gestion de données au travers
d'une dll C dont l'interface dépendra de ce que tu veux faire.

Bref, ce n'est pas impossible... mais ce n'est pas forcément simple, ni
efficace!

--
Picalausa François