Affectation de pointeurs

Résolu
divadav Messages postés 94 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 22 janvier 2009 - 12 juil. 2005 à 09:36
walid2876 Messages postés 49 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 31 août 2008 - 12 juil. 2005 à 23:40
Bonjour à tous !!

Je suis dans un projet, je monte un composant perso, et j'aurai besoin d'une fonction de ce style :

procedure TStringGridPerso.SetPointeur(ValueP: pointer);
begin
aPointeur := AllocMem(sizeof(ValueP));
aPointeur^ := ValueP^;
end;

La variable aPointeur est aussi de type Pointer...

Mon problème est que j'ai une erreur à la compilation sur la dernière ligne de cette fonction : "Opérateur non applicable à ce type d'opérande", et la compilation refuse donc de se faire...

Le déréférencement de pointeur effectué est volontaire, et je ne comprend pas pourquoi ça ne passe pas...

Quelqu'un saurait m'expliquer mon erreur ?? DelphiProg ? Julio ?? AU SECOURS !!

Keep Cool & Be Wild
Divad

4 réponses

jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
12 juil. 2005 à 12:38
Salut,



Bon je ne m'appelles pas DelphiProg, ni Julio mais deux choses posent problème dans ton code:



- sizeOf(ValueP) renverra toujours 4 ("taille" d'un pointeur).

- Tu ne peux effectivement pas copier la zone pointée comme ça. Utilise
plutot un CopyMemory, mais dans tous les cas, ce genre de manip avec
des pointeurs non-typés n'est pas conseillée car la taille des données
pointées ne peut être connue.


j!nH
3
divadav Messages postés 94 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 22 janvier 2009 2
12 juil. 2005 à 14:25
Tu penses qu'on ne peut pas avoir la taille ?? Même en déréférençant le pointeur => sizeOf(ValueP^) ??

Après quelques tests, j'ai l'impression que la fonction SizeOf me renvoie toujours une taille de 4 octets !! Même en faisant sizeOf(TComboBox), ou sizeOf(TObject) !! C'est pourtant bien comme ça qu'on l'utilise ?!

Il doit bien y avoir un moyen de s'en sortir ! Ce n'est pas par hasard que j'utilise des pointeurs non typé : derrière, je veux pouvoir manipuler n'importe quel type de composant (ou presque !).

La grande question, c'est : À partir d'un simple pointeur, comment savoir ce qui se cache derrière ??

Par contre, merci pour le copyMemory, j'y pensait plus du tout !

Keep Cool & Be Wild
Divad
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
12 juil. 2005 à 14:31
Pour avoir testé pendant très longtemps, je peux te dire qu'à partir
d'un pointeur non-typé nous ne pouvons pas retrouver la taille de la
zone pointée.



Concernant le sizeOf c'est normal qu'il renvoit toujours 4 octets, car
une objet "est" un pointeur, c'est juste transparent pour l'utilisateur
sous Delphi. Pour un objet, la taille de l'instance est donnée par
InstanceSize par exemple.




j!nH
0
walid2876 Messages postés 49 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 31 août 2008
12 juil. 2005 à 23:40
Bonjour
Attention : une variable Pointer ne peut etre déréferencée
Mettre un ^ apres une variable Pointer declenche une erreur de compilation
Pour acceder a ces donnée il faux la transtypée ds un autre type pointeur et apres fait la déréferencer...
0