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 :

Path Dll mobile dans Dllimport [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur Logiciel Système Embarqués
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur Logiciel Système Embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 25
    Points
    25
    Par défaut Path Dll mobile dans Dllimport
    Bonjour à tous,

    J'ai un petit problème sur un programme que je n'arrive pas à résoudre à propos de la fonction Dllimport. En deux mots : Mon programme en C# doit aller chercher une Dll non managée en C++ pour utiliser les fonctions de la Dll.
    Jusque la tout fonctionne. Mais ce programme est fait pour être mobile.
    Sur ma clef, j'ai copier le fichier .exe et la Dll. Ces fichiers seront ensuite copier sur l'ordinateur de la personne qui souhaite utiliser l'application. Donc les adresses "path" de la Dll changerons tous les 4 matins.

    exemple de ma fonctions Dll import (fonctionne correctement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    [DllImport("C:/exemple.dll",
                    CharSet = CharSet.Auto,
                    CallingConvention = CallingConvention.Cdecl)]
                [return: MarshalAs(UnmanagedType.I4)]
                public static extern Int32 F_FonctionDll(Int32 no);
    Maintenant j'aimerais pouvoir remplacer le lien : "C:/exemple.exe" par un chemin automatique. Donc j'ai trouvé la fonction : Application.StartupPat
    (qui me permet d'obtenir le path de mon fichier exécutable:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    String adress = Application.StartupPath;        // Me donne tous le chemin     jusqu'au dossier de l’exécutable sans le nom de l'exe. 
    System.Type type = Application.StartupPath.GetType();
     
                [DllImport(adress + "maDll.dll", // visual ne veut rien entendre ca ne marche pas.... :-(
                    CharSet = CharSet.Auto,
                    CallingConvention = CallingConvention.Cdecl)]
                [return: MarshalAs(UnmanagedType.I4)]
                public static extern Int32 F_FonctionDll(Int32 no);


    Mais la, ça ne fonctionne pas. Mes compétences étant réduite, je n'arrive pas à trouver de réelle solution pour que ça fonctionne, quelqu'un pourrait m'aider??

    Cordialement , Clément

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour

    Il est tout à fait normal que cela ne marche pas : en effet le cycle de vie des instances des classes "Attribute" est totalement décorrélé du cycle de vie des instances normale et du cycle de vie des initialiseurs statiques.

    Donc, il n'y a pas moyen de s'assurer que la variable adress soit initialisée au moment de l'instanciation de la classe DllImportAttribute (qui est instancié uniquement quand un appel à GetCustomAttribute est fait).

    Comme il est impossible de s'assurer de cette initialisation, le compilateur, dans sa grande sagesse, t'envoie bouler

    Tu ne peux mettre que des constantes dans la déclaration DllImport.

    La seule solution envisageable ici est d'ajouter dynamiquement le répertoire au PATH de l'environnement.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur Logiciel Système Embarqués
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur Logiciel Système Embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Merci pour l'explication.
    Je vais faire mes petites recherches pour apprendre à ajouter dynamiquement le répertoire au PATH de l'environnement.
    Merci. Cordialement, Clément

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Tu peux utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Environment.SetEnvironmentVariable

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 232
    Points
    4 232
    Par défaut
    tu n'as pas besoin de spécifier le répertoire si ta dll est au même endroit que ton application ou dans le dossier (système 32)
    chez moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [System.Runtime.InteropServices.DllImport("Functions.dll")]
            static extern void fnPostMessage(IntPtr process,Int32 nb,Int32 key,Int32 type);
    fonctionne très bien

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par youtpout978 Voir le message
    tu n'as pas besoin de spécifier le répertoire si ta dll est au même endroit que ton application
    Seulement si le repertoire courant est le répertoire de l'application au lancement, sauf erreur de ma part.

    Pour le répertoire System32, c'est normal, car il est par défaut dans la liste des PATH secondaires.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/11/2006, 11h12
  2. [VB6] Utiliser dll .Net dans VB6
    Par sokette dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 31/03/2005, 14h34
  3. Réponses: 16
    Dernier message: 22/03/2005, 21h57
  4. intégrer dll VB dans code C/C++
    Par inertia dans le forum MFC
    Réponses: 3
    Dernier message: 09/05/2004, 12h09

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