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

Delphi Discussion :

Passage sous VISTA, des erreurs apparaissent


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 50
    Points
    50
    Par défaut Passage sous VISTA, des erreurs apparaissent
    Bonjour,

    Je suis actuellement en stage dans le cadre de mon BTS Informatique et Réseau dans une petite entreprise.
    Je n'ai aucune connaissance en Delphi et dois analyser pourquoi les programmes dévellopés en Delphi ne passent pas sous Vista.
    J'ai relevé quelques erreurs et exécuté le mode "Pas-à-pas" pour trouver les lignes défaillantes. Pouvez-vous m'aider à les réparer ?

    Merci d'avance.

    PS : J'utilise Delphi 7.

    "Le projet gestion_radio.exe a provoqué une classe d'exception ERangeError avec le message 'Erreur de vérification d'étendue. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Attributes :=FileGetAttr(K.fichier[I]);
    "Le projet gestion_radio.exe a provoqué une classe d'exception EAccessViolation avec le message 'Violation d'accès à l'adresse 0078D3CD dans le module 'gestion_radio.exe'. Lecture de l'adresse 000000B4'. Processus stoppé utilisez Pas-à-pas ou Exécuter pour continuer."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i := 0 to f_mixer.Destinations[1].Connections.Count-1 do begin
    "Violation d'accès à l'adresse 0078D3CD dans le module 'gestion_radio.exe'.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 550
    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 550
    Points : 25 120
    Points
    25 120
    Par défaut
    C'est bien vaste comme sujet !

    Première Chose à faire

    tu encadre ces lignes comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try
      Attributes :=FileGetAttr(K.fichier[i]);
    except
      on E: Exception do raise ExceptClass(E.ClassType).CreateFmt('Error on FileGetAttr : "%s"', [E.Message]);
    end;
    Ainsi tu pourras lancer le programme en Dehors de Delphi, et voir si l'exception est bien sur ces lignes et non pas ailleurs (parfois c'est le bloc d'avant)

    sinon FileGetAttr encaspule l'API GetFileAttributes, voir les specifs de cette fonction en Vista

    le ERangeError peut aussi se produire sur un Tableau, i pouvant être en dehors du tableau ?


    Ensuite pour les violations d'accès, on a pas le type des objets que tu manipules, Form, ActiveX, ... difficile de trouver une réponse juste, ... pour la boucle Destination, découpe le code pour accèder à chaque membre étape par étape

    pour le second, consulte la doc de la lib, il se peut qu'il y a des DLL qui ne soit pas porté sur Vista ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    Merci pour la réponse.
    En bidouillant, j'ai vu que si je déclarais "Attributes" en Integer au lieu de le déclarer en Word, je n'ai plus d'erreur...
    Pour la boucle for, je ne comprends pas tout :
    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
    constructor TswAudio_Mixer.create(owner: Tcomponent);
    Var i :Integer;
    begin
      f_mixer := TAudioMixer.Create(owner);
      f_mixer.MixerId := 0;
      f_InNames := TStringList.Create;
      f_InNames.Sorted := False;
      f_OutNames := TStringList.Create;
      f_OutNames.Sorted := False;
      for i := 0 to f_mixer.Destinations[0].Connections.Count-1 do begin
        f_OutNames.Add(f_mixer.Destinations[0].Connections[i].data.szName);
      end;
      for i := 0 to f_mixer.Destinations[1].Connections.Count-1 do begin
        f_InNames.Add(f_mixer.Destinations[1].Connections[i].data.szName);
      end;
    end;
    La première boucle for s'execute sans problème. La seconde coince. Je pense donc que c'est une erreur de tableau. Destinations[] doit être dépassé, mais je ne sais comment la résoudre.

    Qu'en pensez-vous ?

    Merci d'avance.

  4. #4
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    Bonjour,
    Ton tableau Destinations à combien d'entrée ? Vérifit avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f_mixer.Destinations.Count
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par HumanTool
    Bonjour,
    Ton tableau Destinations à combien d'entrée ? Vérifit avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f_mixer.Destinations.Count
    Je n'ai pas bien compris ce que je dois faire...

  6. #6
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    Dans le pas à pas, au à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i := 0 to f_mixer.Destinations[0].Connections.Count-1 do begin
    tu appuis sur les touches CTRL + F7 et tape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f_mixer.Destinations.Count
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    La boucle for étant dans un fichier 'UswVoip_AudioMixer' qui est inclu dans le projet, je n'arrive pas à faire le CTRL+F7 quand il le faut...
    Il n'est pas possible de faire un genre de printf("%d",Destinations[]) en Delphi afin d'afficher les valeurs du tableau ?

  8. #8
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 669
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 669
    Points : 7 017
    Points
    7 017
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(IntToStr(f_mixer.Destinations.Count));
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    Désolé, je n'avais pas compris l'utilisation de CTRL+F7.
    Alors, dès que je commence ma boucle, la valeur de f_mixer.Destinations.Count est "[Processus non accessible]".

  10. #10
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    Dans la déclaration de l'objet TAudioMixer de quel type est Destinations ?
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 550
    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 550
    Points : 25 120
    Points
    25 120
    Par défaut
    En bidouillant, j'ai vu que si je déclarais "Attributes" en Integer au lieu de le déclarer en Word, je n'ai plus d'erreur...
    Non pas de Bidouille c'est un DWord donc un integer en aucun cas un Word, c'est tout à fait normal !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par HumanTool
    Dans la déclaration de l'objet TAudioMixer de quel type est Destinations ?
    Je n'arrive pas à la trouver...

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    J'ai trouvé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Type TswAudio_Mixer = class(TComponent)
    private
      f_mixer : TAudioMixer;
      f_OutNames,f_InNames : TStringList;
      procedure LineCodeToDC(LineCode:Byte;Var ADestination, AConnection:Integer);
      function IndexOf(aList:TStringList;aString:String):Integer;
    protected
    public

  14. #14
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    Essayes de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(IntToStr(Length(f_mixer.Destinations));
    avant la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i := 0 to f_mixer.Destinations[0].Connections.Count-1 do begin
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    J'ai des erreurs d'identificateur non déclarés pour "ShowMessage" & "IntToStr".

  16. #16
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    Il te manque
    dans la partie "uses" en haut de ton code aprés "interface"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    unit Main;
     
    interface
     
    uses
    Windows, SysUtils, Dialogs,....
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    Les erreurs ont disparus. J'ai maintenant :
    [Erreur] UswVoip_AudioMixer.pas(93): Types incompatibles
    [Edit]
    La ligne 93 est la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(IntToStr(Length(f_mixer.Destinations)));

  18. #18
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    Bon....
    va aux lignes où se trouvent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Type TswAudio_Mixer = class(TComponent) 
    private  
    f_mixer : TAudioMixer; 
    f_OutNames,f_InNames : TStringList; 
    procedure LineCodeToDC(LineCode:Byte;Var ADestination, AConnection:Integer); 
    function IndexOf(aList:TStringList;aString:String):Integer; 
    protected 
    public
    mais ta souris sur TAudioMixer et appui sur CTRL. En restant appuyé cliques sur TAudioMixer (c'est devenu une sorte de lien hypertexte)
    Normalement cela t'envoie sur la déclaration de TAudioMixer, et tu devrais trouver le type de "Destinations"

    Si cela ne marche pas places juste le curseur de ta souris sur TAudioMixer, une infobulle devrais apparaitre en spécifiant "...xxxx.TAudioMixer..."
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    Ca marche avec les ' ' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(IntToStr(Length('f_mixer.Destinations')));
    La valeur de 'f_mixer.Destinations' est de 20. Je clique sur OK, puis il y a le message d'erreur.

  20. #20
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    Certes ça marche mais length(chaine) retourne la longueur de la chaine. Mais Length(tableau) retourne la longueur du tableau.
    Donc là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Length('f_mixer.Destinations')
    c pas ce que l'on veut
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

Discussions similaires

  1. [CakePHP] Soucis sous CakePHP, des erreurs dans le debug
    Par MaitreGNOME dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 18/08/2014, 20h34
  2. Problème de passage sous vista : LoadLibrary
    Par SkYsO dans le forum Débuter
    Réponses: 3
    Dernier message: 22/04/2009, 14h25
  3. [EasyPHP] Désactiver l'affichage des erreurs sous EasyPHP
    Par shub dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 02/12/2007, 08h00
  4. Mon ordi rame depuis le passage sous Vista
    Par littlelewis dans le forum Ordinateurs
    Réponses: 15
    Dernier message: 14/05/2007, 09h57
  5. Gestion des processeur centrino sous Vista
    Par SkiZoSnaKe dans le forum Windows Vista
    Réponses: 2
    Dernier message: 23/04/2007, 13h03

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