IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Migration Delphi 7 Delphi xe, violation d'accès


Sujet :

Langage Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Migration Delphi 7 Delphi xe, violation d'accès
    Bonjour,

    Je suis en train de migrer une application de Delphi 7 vers Delphi xe.

    Je dois ainsi migrer mes composants Indy de Indy 9 vers Indy 10 et mes chaînes de caractères d'AnsiString vers Unicode.

    Pour les chaînes de caractères, j'ai convertis sous Delphi xe les string en ansistring (méthode basique mais je n'ai pas trop le temps de faire mieux).

    Pour les composants Indy j'ai un problème sur le connect. Mon application tourne, mais au bout de quelques heures génère une violation d'accès sur le connect.

    Je bloque depuis 1 mois sur ce problème. Je me permet donc de poser une question sur ce forum.

    Merci d'avance pour vos réponses.


    Voici un extrait de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    procedure SendBufs;
    var
      StA, StB, StC: string;
      LBuffer : TIdBytes;
    begin
      with MoteurCaobsBufs.TCPClient do begin
        try
          ConnectTimeout := 5000;
          ReadTimeout := 5000;
           if Connected
            then begin
              try
              disconnect;
              except
              if not(IOHandler.InputBufferIsEmpty)
                then IOHandler.InputBuffer.Clear();
              Disconnect();
              end;
            end;
          Connect;
     
        except //si la connexion échoue
          on e : Exception do begin
          TracerCaobsBufs('SendBufs : Exception : ' + E.Message);

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 577
    Points : 25 225
    Points
    25 225
    Par défaut


    StA, StB, StC servent à Quoi ?
    String ? AnsiString ou RawByteString ?

    Pourquoi une Deconnexion puis Re-Connexion ?
    tu ne peux pas là laisser ouverte ?

    As-tu un Multi-Thread ?
    Un risque de fermer la Connexion TCP dans un thread alors qu'un autre thread est en train de lire ou d'écrire dedans ?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour la réponse.

    StA, StB et StC sont utilisées pour afficher des infos lorsque le logiciel est lançé en mode Debug. Le
    mode Debug n'étant pas actif lors de ma violation d'accès, ces string ne sont pas utlisées. J'aurais
    dû les enlever de mon extrait de code.

    Il ne s'agit pas d'une Deconnexion mais du vidage du buffer d'entrée, si la connexion est déjà établie.
    Nous avons eu des contacts avec Embarcadero qui nous a conseillé d'effectuer ce test avant de se
    connecter (suite à la violation d'accès). Nous avons obéis en désespoir de causes mais cela n'a pas
    arrangé le pbe ...

    Je pourrais effectivement essayer de laisser la connexion ouverte mais il s'agit d'un logiciel qui comporte
    de nombreuses connexions. J'ai ainsi peur que cela alourdisse l'exécution du programme. D'autres part, plusieurs
    logiciel de se type se connecte sur le même port du serveur, je ne sais donc pas si la connexion multiple fonctionne.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Je ne suis pas en multithread sur le port utilisé (6010)

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Personne pour m'aider ?

    Je ne trouve pas beaucoup d'informations sur le passage à Delphi xe et notamment Indy et l'unicode.

    Toute aide bienvenue.

    Merci

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if Connected then
    begin
      try
        disconnect;
      except
       if not(IOHandler.InputBufferIsEmpty) then
         IOHandler.InputBuffer.Clear();
        Disconnect();
      end;
    end;
     
    Connect;
    Citation Envoyé par lolo2943
    Il ne s'agit pas d'une Deconnexion mais du vidage du buffer d'entrée, si la connexion est déjà établie.
    Ton code vérifie si la connexion est ouverte, la ferme dans ce cas, en cas d'erreur, cela nettoie le buffer, et retente la fermeturen puis tente une nouvelle connexion !
    Tu ne comprends pas ton propre code ?

    Citation Envoyé par lolo2943
    je ne sais donc pas si la connexion multiple fonctionne
    Normalement un serveur TCP\IP doit accepter une multitude de client (heureusement d'ailleurs), donc tu dois pouvoir lancer ton client TCP sur le plusieurs postes sans aucun soucis !

Discussions similaires

  1. Violation d'accès Delphi
    Par titou31000 dans le forum Langage
    Réponses: 15
    Dernier message: 22/03/2011, 09h03
  2. violation d'accès avec delphi 2009
    Par lazaro dans le forum Débuter
    Réponses: 0
    Dernier message: 25/10/2009, 11h13
  3. Delphi 2005 / Violation d'accès
    Par ninouti dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2005, 11h51
  4. [DELPHI][PROECEDURES STOCKES] Access violation
    Par All Jinx dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/05/2004, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo