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

Visual Studio Discussion :

Utilisation d'une dll dans un projet Visual Studio 2008 [C#]


Sujet :

Visual Studio

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Utilisation d'une dll dans un projet Visual Studio 2008 [C#]
    Bonjour a tous !

    Je ne parviens pas a utiliser une dll dans mon projet.

    Cette dll est une dll que j'ai fait moi même, elle contient 3 fichiers (2 classes et 1 interface) :

    Profiler.cs
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
     
    namespace Profiler
    {
        public static class Profiler
        {
            private static MyScope scoTmp;
            private static ArrayList tabSco = new ArrayList();
     
            // Retrieve an IScope by its name in the current context
            // Param: Scope name
            static IScope Get(string name)
            {
                int i;
                int nbSco;
     
                scoTmp = null;
                i = 0;
                nbSco = tabSco.Count;
                while (i < nbSco)
                {
                    if (((MyScope)tabSco[i]).Name == name)
                    {
                        scoTmp = ((MyScope)tabSco[i]);
                        i = nbSco;
                    }
                    i++;
                }
                Console.WriteLine("Scope " + scoTmp.Name + " trouvé");
                return scoTmp;
            }
            // Start or continue an IScope in the current context
            // Param: Scope name
            // Return: The IScope created or continued
            static IScope Start(string name)
            {
                scoTmp = ((MyScope)Profiler.Get(name));
                if (scoTmp != null)
                {
                    scoTmp.Start();
                    Console.WriteLine("Scope " + name + " continué ou commencé");
                }
                else
                {
                    scoTmp = new MyScope(name);
                    tabSco.Add(scoTmp);
                    Console.WriteLine("Scope " + name + " créé");
                }
                return scoTmp;
            }
            // Close the IScope
            // Param: The scope
            static void Close(IScope scope)
            {
                scope.Stop();
                Console.WriteLine("Scope " + ((MyScope)scope).Name + " fermé");
            }
            // Close the scope by its name in the current context
            // Param: Scope name
            static void Close(string name)
            {
                scoTmp = ((MyScope)Profiler.Get(name));
                if (scoTmp != null)
                    scoTmp.Stop();
                Console.WriteLine("Scope " + name + " fermé");
            }
            // Close the last opened scope
            static void Close()
            {
                ((MyScope)tabSco[tabSco.Count - 1]).Stop();
                Console.WriteLine("Dernier scope fermé");
            }
            // Export all measures in a CSV format
            static void ExportCsv()
            {
                Console.WriteLine("Fichier .csv en cours d'export...");
            }
        }
    }
    MyScope.cs
    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
    25
    26
    27
    28
    29
    30
    31
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Profiler
    {
        class MyScope : IScope
        {
            private string name;
            public string Name { get { return this.name; } set { this.name = value; } }
     
            public MyScope()
            {
            }
     
            public MyScope(string name)
            {
                this.name = name;
            }
     
            public void Start()
            {
            }
     
            public void Stop()
            {
            }
        }
    }
    et IScope.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Profiler
    {
        interface IScope
        {
            void Start();
            void Stop();
        }
    }
    Donc nous somme bien d'accord que ma classe Profiler possèdes des méthodes (static certes, mais méthodes tout de même).

    Ensuite, j'ai fait un projet (un simple Main(string[] args)) :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Profiler;
     
    namespace TestProfiler0
    {
        class Program
        {
            static void Main(string[] args)
            {
                Profiler.Profiler.Close();  //Erreur ici => 'Profiler.Profiler' ne contient pas de définition pour 'Close'
                Console.WriteLine("Hello !");
                Console.ReadKey();
            }
        }
    }
    J'ai bien ajoute mon fichier Profiler.dll en référence a mon projet TestProfiler0 (Clique droit sur le nom du projet -> Ajouter une référence -> Parcourir -> Chemin vers Profiler.dll (C'est le bon dossier j'ai vérifier 5 fois avec les dates de modifications)).

    J'ai teste de mettre juste Profiler.Close() (mais dans le namespace il n'y a pas de classe Close) et faire une instanciation de Profiler.Profiler (Je sais que en static ça marcherai encore moins mais bon... dans le désespoir ^^')

    Comme vous pouvez le voir j'ai rajoute un using Profiler; mais ça ne fonctionne toujours pas.

    Dans Visual Studio lorsque je fais Profiler. => Il voit juste ma classe Profiler mais de type Object sans les méthodes (Juste les méthodes classique de Object => Equals() // ReferenceEquals()). En revanche il ne détecte pas ma classe MyScope.

    Comment dois-je faire pour pouvoir utiliser correctement les classes de mon Profiler.dll ?
    Je suis certain que c'est un oublie tout bête, mais je ne trouve pas...

    D'avance merci pour votre aide et votre lecture.

    Cordialement,
    Rhoblik.

    PS : Je vous demande pardon pour les accents en moins, ainsi que la qualité du code qui n'est pas complet.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Re-Bonjour a tous !

    Dans Visual Studio lorsque je fais Profiler. => Il voit juste ma classe Profiler mais de type Object sans les méthodes (Juste les méthodes classique de Object => Equals() // ReferenceEquals()). En revanche il ne détecte pas ma classe MyScope.
    J'ai trouve pourquoi il ne détectait pas la classe MyScope => class MyScope{} (pas public, donc pas visible en dehors du namespace ^^')
    J'ai change ça (public class MyScope{}) : Du coup je vois toutes les méthodes de MyScope lorsque je l'instancie dans mon programme de test ^^'

    Je vais chercher de ce cote la pour Profiler alors ^^'

    Merci a vous !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Re-re-Bonjour a tous !

    Merci a vous de m'avoir permis de résoudre mon problème (du moins de m'avoir lu).

    En effet c'est bien un problème tout bête :
    Les méthodes de Profiler n’étaient pas public, donc invisible en dehors du namespace.

    En revanche, je pensais que comme la classe Profiler est public, toutes ses méthodes suivaient la règle du public.

    Du coup, j'ai rajouter public devant toutes les méthodes de Profiler, mais en faisant cela, il faut également rajouter public devant 'interface IScope', sinon les paramètre des méthodes de Profiler ne peuvent pas être renseignes.

    Donc mon problème est résolu, je mets le tag ^^

    Merci a tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser une DLL dans un projet MDI
    Par Gazdon dans le forum Fortran
    Réponses: 0
    Dernier message: 26/01/2009, 11h58
  2. Réponses: 10
    Dernier message: 28/06/2007, 13h51
  3. Utilisation d'une librarie dans un projet
    Par gids01 dans le forum MFC
    Réponses: 17
    Dernier message: 27/01/2006, 15h41
  4. insérer une dll dans un projet
    Par Biosox dans le forum MFC
    Réponses: 3
    Dernier message: 24/01/2006, 10h41
  5. Utilisation d'une dll dans C
    Par Korma dans le forum Autres éditeurs
    Réponses: 12
    Dernier message: 08/12/2005, 19h28

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