Question

Je ne suis pas sûr d'avoir expliqué cela du mieux que je peux, mais c'est parti ...

J'ai deux composants personnalisés sur une fiche, qui sont reliés entre eux au moment de la conception via l'EDI. Chaque fois que j'appelle une procédure depuis le composant, j'obtiens la violation d'accès,

  

Violation d'accès à l'adresse 0049A614   dans le module 'Project2.exe'. Lire de   adresse 00000034.

Ceci est une petite section de mon code

TMyClient = class(TClientSocket)
{...}
end;

et ...

TPresence = class(TComponent) 
 private
  ftheClient: TMyClient 
 public 
  procedure SetStatus(status: string);

 published
  property UserName : string read fUserName write fUserName;
  property theClient: TMyClient read ftheClient write ftheClient;
 end;   



procedure TPresence.SetStatus(status: string);
begin
 try
*****   if theClient = nil then
     Exception.Create('theClient  is Nil');
 except
   on e:Exception do
   MessageDlg(e.classname+', '+e.message, mtWarning, [mbOK], 0);
 end;
  {...}
end;

0049A614 est à la *****, et l'IDE s'arrête ici.

J'ai également essayé de faire l'affectation au moment de l'exécution avec

Presence1.theClient := MyClient1;

sans chance

utiliser des procédures de Presence1 ou MyClient1 qui ne s'appuient pas l'une sur l'autre fonctionne bien.

Delphi 7

Suivi: De mghie commentaires, j'ai repensé à ce sujet.

J'ai supprimé le composant TPresence du formulaire (ce qui a provoqué des erreurs IDE étranges, qui auraient pu avoir quelque chose à voir avec cela) et je l'ai créé au moment de la conception, en affectant tout ce qui était nécessaire. Maintenant, cela fonctionne, mais le fait de remettre le composant TPresence à la place de l'erreur renvoie l'erreur.

Merci pour votre aide les gars, je devrais pouvoir résoudre celui-ci maintenant, si je ne peux pas mal rouvrir une autre question:)

Était-ce utile?

La solution

Vous semblez penser que l'exception est déclenchée parce que le champ client de Presence1 n'est pas défini (toutefois, vous obtenez l'exception " Lecture de l'adresse 00000034 " cela signifie que le pointeur Self dans l'appel SetStatus () est nil . Cela indiquerait que vous appelez SetStatus () sur une référence TPresence non attribuée. Il n’est pas vraiment possible d’en dire la raison à partir de l’extrait de code que vous avez posté, mais cela devrait vous aider à démarrer le débogage.

Je vous conseillerais quand même d'écrire une méthode de définition correcte pour toutes les références de composant dans vos propres composants personnalisés - tout d'abord parce que vous avez un meilleur point d'ancrage pour déboguer de tels problèmes (vous pouvez définir un point d'arrêt à cet endroit) et ensuite parce que vous devez toujours Appelez TComponent.FreeNotification () sur ces composants liés pour pouvoir suivre leur destruction et définir la référence interne sur nil .

Autres conseils

Nous avons probablement besoin de plus de votre code. Il est possible que vous ne créiez pas correctement une instance de TPresence qui vous donnerait l'erreur que vous rencontrez. Essayez de nous donner un extrait de code aussi simple que possible qui cause votre erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top