Affectation de pointeurs [Résolu]

divadav 97 Messages postés lundi 13 janvier 2003Date d'inscription 22 janvier 2009 Dernière intervention - 12 juil. 2005 à 09:36 - Dernière réponse : walid2876 49 Messages postés mardi 26 avril 2005Date d'inscription 31 août 2008 Dernière intervention
- 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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
jinh68 215 Messages postés mardi 29 juillet 2003Date d'inscription 1 septembre 2006 Dernière intervention - 12 juil. 2005 à 12:38
3
Merci
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

Merci jinh68 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de jinh68
divadav 97 Messages postés lundi 13 janvier 2003Date d'inscription 22 janvier 2009 Dernière intervention - 12 juil. 2005 à 14:25
0
Merci
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
Commenter la réponse de divadav
jinh68 215 Messages postés mardi 29 juillet 2003Date d'inscription 1 septembre 2006 Dernière intervention - 12 juil. 2005 à 14:31
0
Merci
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
Commenter la réponse de jinh68
walid2876 49 Messages postés mardi 26 avril 2005Date d'inscription 31 août 2008 Dernière intervention - 12 juil. 2005 à 23:40
0
Merci
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...
Commenter la réponse de walid2876

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.