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

Windows Forms Discussion :

Charger une dll


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut Charger une dll
    Bonjour,

    Je vais criser ...

    Avec C# express 2008, j'écris le code suivant:

    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
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using GNU.Gettext;
    using System.Diagnostics; /* Process */
    using System.Runtime.InteropServices;
     
    namespace Localisation_gettext
    {
     
        public partial class Form1 : Form
        {
     
            [DllImport("intl.dll")]
            public static extern void dcgettext(string file);
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
     
                try
                {
                    dcgettext("");
                }
                catch (Exception ec)
                {
                    MessageBox.Show(ec.Message);
                }
     
            }
        }
    }
    à l'exécution, je reçois invariablement le message:

    Impossible de charger la DLL 'intl.dll': Le module spécifié est introuvable. (Exception de HRESULT : 0x8007007E)

    J'ai autorisé le code unsafe dans les propriétés du projet mais ça ne change rien. La dll en question est bien dans le projet.

    Quelqu'un pourrai m'aider svp ?

    J-L

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il faut que la DLL soit dans un des répertoires où Windows recherche les DLL.
    A savoir, dans l'ordre:
    - répertoire de l'exécutable
    - répertoire courant
    - Le répertoire System32 de Windows
    - Le répertoire Windows
    - n'importe quel répertoire défini dans la variable d'environnement %PATH%

    http://msdn2.microsoft.com/fr-fr/lib...18(VS.80).aspx

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Bonjour,

    Citation Envoyé par Papy214 Voir le message
    J'ai autorisé le code unsafe dans les propriétés du projet mais ça ne change rien.
    Cette case sert uniquement lorsque l'on manipule du code avec des blocs unsafe. Sa n'a pas d'influence sur de l'interop.

    Ta dll c'est un assemblage .NET ?

  4. #4
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    non, une dll écrite en C ... GNU Win 32

  5. #5
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Je l'ai mise dans le répertoire de l'exe.
    J'ai aussi essayer de la mettre à la racine de C en complétant le chemin d'accès dans mon code, mais ça ne change rien.
    Par contre, je me demande une chose. Quand j'écris:

    [DllImport("intl.dll")]
    public static extern void dcgettext(string file);

    est-ce que la dll est chargée à ce moment là, ou seulement au moment de l'appel de la méthode plus loin dans le code ?

    Le message d'erreur ne pourrait-il pas venir du fait de la fonction qu'il ne trouverait pas dans le code de la dll ?

  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
    Citation Envoyé par Papy214 Voir le message
    est-ce que la dll est chargée à ce moment là, ou seulement au moment de l'appel de la méthode plus loin dans le code ?
    Elle est chargée au moment où la fonction est appelée pour la première fois.

    Citation Envoyé par Papy214 Voir le message
    Le message d'erreur ne pourrait-il pas venir du fait de la fonction qu'il ne trouverait pas dans le code de la dll ?
    Non, il t'aurai dit "Point d'entrée introuvable dans biduletruc".
    Le problème doit venir d'ailleurs. Juste comme ça, tu es sur du nom de la dll ?

  7. #7
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    J'ai bien recontrolé mon code ... retesté ... ma dll s'appelle gettextpo.dll, je l'ai ajoutée à mon projet, et j'ai demandé à C# de toujours copier la dll avec l'exe.
    J'ai vérifié, la dll est copiée dans debug et release.
    Et à chaque fois, le meme message. Est-ce que ça pourrait venir de la dll elle-meme ?

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

Discussions similaires

  1. Comment charger une DLL win32 en C# de manière dynamique
    Par Jayceblaster dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/06/2009, 18h38
  2. Réponses: 3
    Dernier message: 24/11/2006, 11h12
  3. [Librairie] Charger une DLL delphi
    Par yanis97 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 24/03/2006, 11h56
  4. Charger une DLL sous java
    Par mouzon dans le forum Général Java
    Réponses: 1
    Dernier message: 22/03/2006, 19h46
  5. Réponses: 5
    Dernier message: 13/10/2005, 10h49

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