SOS

Résolu
Signaler
Messages postés
23
Date d'inscription
samedi 12 avril 2003
Statut
Membre
Dernière intervention
18 mai 2009
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Bonjour,

Appel a tout le monde DELPHI j'ai un problème dans mon application un message d'erreur (Violation d'accés à l'adresse 0049FFE3 dans le module "Gpaie.exe" lecture de l'adresse 00000000 svp que je dois faire depuis deux jours que je verifier mon application est le résultat (erreur) toujours même message.
je lance cet appel aux experts et les gens qui aiment DELPHI

MERCI

7 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
15
Bon, bin je vais quand même essayer de te faire avancer.

Il me semble que ce code, c'est Borland qui l'a écrit, mais je l'ai pas, vu que j'ai une edition perso.

Ce code, c'est un peu le coeur de ton appli.
Quand tu y réfléchit, quand est ce que le code que tu as écrit est-il executé ? C'est soit lors du chargement d'une Form, lors d'un clique sur un bouton, lors de pression d'un raccourcis clavier, lors d'un déplacement de la souris au dessus d'un contrôles, à l'aide d'un timer...

A chaque fois, tu as sélectionné un évenèment et tu as écrit ton code dans la routine de cette énvènement.
Qu'elle mécanisme permet de connecter ces routines à l'activité de l'utilisateur ?

C'est Windows qui récupère tous les déplacements de souris, les appuis de touche, les timers... Il détermine quelle fenêtre est concernée par ces actions, et envoie des messages à l'application qui a créé cette fenêtre. Ces messages contiennent la fenêtre concernée, le type d'action, ainsi quelques paramètres dépendant du message, tel que la position de la souris...

L'application, quand elle n'execute pas ton code, elle est en attente. En attente de messages en provenance de Windows. C'est la méthode HandleMessage, qui contient très certainement un GetMessage qui assure cette attente. Ton appli ne consomme donc pas de CPU jusqu'à ce qu'un message arrive. Quand un message arrive, l'application le traite, ou le fait suivre à la fenêtre concernée par le message. Puis elle se remet en attente. C'est ta boucle repeat (...) until Terminated.

C'est du code écrit par Borland qui traite ces messages, et appel tes évènements en fonction de ceux-ci.

Tout ça pour dire que ce n'est certainement pas ce code en lui même qui pose problème. Il ne fait que distribuer les messages... Ton appli plante dans un évènement que tu as implémenté, ou dans du code de Borland qui plante à cause d'un problème d'initialisation de ta part ou quelque chose comme ça.

Pour savoir plus précisément où est l'erreur, tu pourrais utiliser F7 à la place de F8 pour entrer dans les appelées, mais ça risque d'être long. Place plutôt des points d'arrêt, dans tes évènements. Dans le formload de ta form principal pour commencer par exemple.
Messages postés
166
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
13 octobre 2008

Bonjour!

Essai de d'isolé l'endroit dans ton code qui pose probleme. Utilise les points d'arret et l'execution en mode pas-à-pas pour trouvé d'ou vient la partie de ton code qui genere cette erreur.

Si lorsque tu a identifié d'où venais l'erreur, tu n'arrive pas a resoudre le probleme, met ici le bout de code.
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonsoir

Tu compiles ton programme, tu le lance avec F8, c'est à dire en pas à pas, puis dans le menu Chercher tu cliques sur "Erreur d'execution", et là tu saisis ton adresse, c'est à dire $0049FFE3, tu arriveras alors sur le code qui pose problème.

P.S. Ne pas oublier, que tant qu'un projet n'est pas débogué, il est plus que souhaitable que dans les options du projet, onglet Compilateur, TOUTES les cases de "Erreurs à l'exécution" et  de "Débogage" soient cochées (Tu auras alors plus d'informations lors des exceptions)

Cordialement. <hr />"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Salut,


très bon conseil de WhiteHippo, comme toujours ...


juste une petite précision dans les versions plus récentes de Delphi  (Ex Turbo Delphi)

"Erreur d'execution" est devenu "Aller à l'adresse" ... rien de bien méchant

 
@+
Cirec

<hr size="2" />
Messages postés
23
Date d'inscription
samedi 12 avril 2003
Statut
Membre
Dernière intervention
18 mai 2009

MERCI WHITEHIPPO


VOILA LE RESULTAT DU F8 MAIS JE N'ARIVE PAS A INTRODUIRE $0049FFE3 SVP QUE JE DOIS FAIRE 




procedure TApplication.Run;
begin
  FRunning := True;
  try
    AddExitProc(DoneApplication);
    if FMainForm <> nil then
    begin
      case CmdShow of
        SW_SHOWMINNOACTIVE: FMainForm.FWindowState := wsMinimized;
        SW_SHOWMAXIMIZED: MainForm.WindowState := wsMaximized;
      end;
      if FShowMainForm then
        if FMainForm.FWindowState = wsMinimized then
          Minimize else
          FMainForm.Visible := True;
      repeat
        try                                                               //DE TRY HANDLE MESSAGE AU UNTIL TERMINATED
          HandleMessage;                                       // LA BOUCLE LORS F8 //
        except
          HandleException(Self);
        end;
      until Terminated;
    end;
  finally
    FRunning := False;
  end;
end;
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
15
Salut,

Je sais pas ce que c'est HandleMessage, et ou tu veux en venir...

Mais je crois que tu voulais faire un Application.ProcessMessage.

Ou un GetMessage/TranslateMessage/DispatchMessage...

Pourquoi ne pas utiliser Application.Run ?

Bref, précise ton objectif...
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
15
Erf, mais tu es dans Application.Run...

Et HandleMessage semble être judicieux...

Oublie tout ce que j'ai dit...