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 :

DllImport et App.config


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Points : 2
    Points
    2
    Par défaut DllImport et App.config
    Bonjour,

    Je poste ici car je n'arrive pas à résoudre mon problème. J'ai un un programme qui fait appel à une dll dont le chemin doit être paramétrable via le fichier de conf.

    J'utilise donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const string _dllLocation = "MaDLL.dll";
     
    [DllImport(_dllLocation, EntryPoint = "DM_API_CheckError")]
                public static extern int DM_API_CheckError();
    Cela fonctionne très bien car _dllLocation doit etre une constante mais c'est ici que sa deviens problématique. je ne peu pas remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const string _dllLocation = "MaDLL.dll"
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const string _dllLocation = ConfigurationManager.AppSettings["DM_APIDllPath"];
    Je voudrais donc savoir si il y a moyen de paramétrer cette constante hors ligne ou de la caster car la je patauge complètement.
    Merci d'avance

    Philippe

  2. #2
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bon après bien questions j'ai la solution:

    http://blogs.msdn.com/b/jonathanswif...23002900_.aspx

    Il faut utiliser la dll kernel32 qui peu ouvrir n'importe quelle dll.


    Ce code permet d'importer le kernel et les méthodes dont on a besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    static class NativeMethods
            {
                [DllImport("kernel32.dll")]
                public static extern IntPtr LoadLibrary(string dllToLoad);
     
                [DllImport("kernel32.dll")]
                public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
     
     
                [DllImport("kernel32.dll")]
                public static extern bool FreeLibrary(IntPtr hModule);
            }


    Déclaration de la méthode dans la classe principale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
            public delegate int DM_API_CheckError();
    Dans une classe static, on appel ensuite les methode depuis une classe tierce

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     public static class UnsafeNativeMethods
            {
     
               // public static IntPtr pDll = NativeMethods.LoadLibrary(ConfigurationManager.AppSettings["DM_APIDllPath"]);
     
                //Check errors:DM_API_GetErrorString
                public static IntPtr pAddressOfFunctionToCall_DM_API_CheckError = NativeMethods.GetProcAddress(pDll, "DM_API_CheckError");
                public static DM_API_CheckError _DM_API_CheckError = (DM_API_CheckError)Marshal.GetDelegateForFunctionPointer(
                                                                                        pAddressOfFunctionToCall_DM_API_CheckError,
                                                                                        typeof(DM_API_CheckError));
     
            }
    Bon j'ai volontairement mis qu'une méthode simple mais on peu évidement en utiliser une multitude. Il conviens tout de même de faire attention au type de données. Dans mon cas ma dll est en C et les char* sont des intPtr et nécessites de "Marchaler".

    Voila donc ce que j'ai fait si cela peut aider quelqu'un...

Discussions similaires

  1. [VB.NET] Recuperer un paramettre avec App.Config
    Par Monster77 dans le forum Windows Forms
    Réponses: 21
    Dernier message: 31/12/2007, 14h06
  2. [SharpDevelop] app.config
    Par aeled dans le forum Sharpdevelop
    Réponses: 7
    Dernier message: 17/09/2006, 15h05
  3. Réponses: 9
    Dernier message: 04/05/2006, 17h33
  4. [VB.Net] Fichier app.config
    Par tomnie dans le forum Windows Forms
    Réponses: 24
    Dernier message: 28/03/2006, 10h33
  5. [vb.net][app.config] ou se trouve le fichier de config?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/02/2006, 14h22

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