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

C# Discussion :

Eviter une erreur générée par un "using"


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Par défaut Eviter une erreur générée par un "using"
    Bonjour

    Mon programme utilise des fonctionnalités graphiques DirectX ...

    J'ai donc au début une instruction :

    using Microsoft.DirectX

    Le problème c'est que si je lance mon appli sur une machine où DirectX n'est pas installé ça crée direct un plantage

    Comment l'éviter ? Il y a t-il quelque chose d'équivalent à un test try {...} catch {...} ?

    Merci !!!

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Tu n'as qu'a pas mettre le using dans l'entête et faire l'instanciation de tes classes avec le namespace complet. Par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.IO.FileInfo f1 = new System.IO.FileInfo("c:\\temp\\fichier1.txt");
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInfo f1 = new FileInfo("c:\\temp\\fichier1.txt");
    ?

    C'est une supposition...

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Salut,

    Tu n'as qu'a pas mettre le using dans l'entête et faire l'instanciation de tes classes avec le namespace complet. Par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.IO.FileInfo f1 = new System.IO.FileInfo("c:\\temp\\fichier1.txt");
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInfo f1 = new FileInfo("c:\\temp\\fichier1.txt");
    ?

    C'est une supposition...

    A+
    Ca me parait pas mal du tout comme idée

    Je teste ça demain et je te tiens au courant ...

    Par contre, ça allourdi un peu l'écriture

    Merci !

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Je comprends pas bien là.

    Si tu as pas DirectX d'installé, que tu utilises un using ou pas ça va planter

  5. #5
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Si tu as pas DirectX d'installé, que tu utilises un using ou pas ça va planter
    Oui, ça plantera, mais est-ce que ce sera dès l'utilisation de la dll ou bien au moment où il arrivera sur la ligne?

    De plus, le fait de ne pas mettre le using permet d'englober l'appel dans un try catch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try{
    System.IO.FileInfo f1 = new System.IO.FileInfo("c:\\temp\\fichier1.txt");
    }
    catch
    {}
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  6. #6
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    les "using" n'ont rien à voir, mais vraiment rien à voir avec ton crash cf.
    Tu peut très bien faire ceci :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try{
    FileInfo f1 = new FileInfo("c:\\temp\\fichier1.txt");
    }
    catch
    {}
    mais là n'est pas le problème.

    Si tu utilises DirectX et que ce dernier n'est pas installé (au fait, quelle version de DirectX ? Managed Direct X aussi ?) alors oui ton programme va crasher dès la première utilisation d'un quelconque truc lié à DirectX. Pour vérifier, try-catch à cette échelle est tout sauf efficace. Il faut au lancement du programme (peut être même dès le Main dans Program.cs) vérifier si DirectX est bien installé, et adopté une conduite en fonction du cas (en général : "Ce programme nécessite DirectX v... blabla").

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Salut,

    Tu n'as qu'a pas mettre le using dans l'entête et faire l'instanciation de tes classes avec le namespace complet. Par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.IO.FileInfo f1 = new System.IO.FileInfo("c:\\temp\\fichier1.txt");
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInfo f1 = new FileInfo("c:\\temp\\fichier1.txt");
    ?

    C'est une supposition...

    A+
    Bon, j'ai fait le test mais le problème subsiste ...

    Ce n'est donc visiblement pas au niveau des instructions "using" que ça plante ...

    Merci en tout K pour ta suggestion

  8. #8
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Ben y'a plus qu'à imposer des pré-requis....
    Ou de faire des test car finalement, ce genre d'erreurs ne se produit que lorsque tu fais appel à la dll.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/02/2010, 19h14
  2. Réponses: 14
    Dernier message: 03/07/2006, 16h55
  3. Réponses: 2
    Dernier message: 21/06/2004, 15h55

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