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

Framework .NET Discussion :

appeler une DLL depuis un executable


Sujet :

Framework .NET

  1. #1
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut appeler une DLL depuis un executable
    j'ai un petit soucis assez etrange. j'ai un executable en C++ managé qui utilise une DLL ( elle aussi en C++ managé ).

    le programme fonctionne bien si je copie la DLL dans le repertoire de l'executable mais il crash si jamais je met la DLL dans un autre repertoire ( je precise que ce repertoire est quand meme dans la variable d'environment Path ).

    Est ce normal ?

    XXiemeciel
    XXiemeciel

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    C'est normal. Si je me souviens bien, tu dois pouvoir placer ta Dll dans un répertoire qui porte le même nom qu'elle et qui est un sous-répertoire du répertoire contenant ton exécutable. Ai-je été clair ? Je vais essayer de te trouver l'ensemble des cas de recherche...

  3. #3
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    ok merci, si tu as de la documentation ( en anglais de preference ) je suis preneur.

    XXiemeciel
    XXiemeciel

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Voici comme promis l'algorithme de recherche d'assemblage par le CLR. L'application est installée dans le répertoire ApplicationDirectory et l'assembly recherché se nomme MyAssembly.

    - ApplicationDirectory\MyAssembly.dll
    - ApplicationDirectory\MyAssembly\MyAssembly.dll
    - ApplicationDirectory\MyPrivatePath\MyAssembly.dll
    - ApplicationDirectory\MyPrivatePath\MyAssembly\MyAssembly.dll

    Si rien n'est trouvé, l'extension .exe est utilisée à la place de .dll.

    MyPrivatePath se configure de la façon suivante :
    dans le fichier .config de ton application, tu peux définir des chemins privés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <runtime>
       <assemblyBinding xmlns="urn:scemas-microsoft-com:asm.v1">
          <probing privatePath="MyPrivatePath" />
       </assemblyBinding>
    </runtime>

  5. #5
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    qu'appelles tu le fichier .config ? est un fichier que je peux creer avec l'executable ?

    est-il genere par la compilation ? je n'utilise pas visual studio pour compiler. j'appelle directement cl.exe depuis une ligne de commande et un makefile.
    XXiemeciel

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    C'est le fichier de configuration de ton exécutable.
    Si ton programme se nomme Program.exe, alors le fichier de configuration sera Program.exe.config.
    Tu peux le créer à la main. C'est un fichier Xml placé à côté de ton exécutable. Par contre, tu dois inclure le Xml que je t'ai fourni dans une balise Configuration :
    <configuration>
    <runtime>
    <assemblyBinding xmlns="urn:scemas-microsoft-com:asm.v1">
    <probing privatePath="MyPrivatePath" />
    </assemblyBinding>
    </runtime>
    <configuration>

  7. #7
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    ok merci, je vais tester ca.
    XXiemeciel

  8. #8
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    ca ne fonctionne pas, est ce que le directory MyPrivatePath doit imperativement se trouver dans le repertoire de l'executable ?

    j'ai essaye un path absolue dans le XML file mais il ne trouve pas la DLL.
    XXiemeciel

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Oui, désolé : j'ai oublié de te dire que ce sont des sous-répertoires du répertoire de base.
    Sinon, je n'y ai pas pensé avant, mais tu peux utiliser un mécanisme qui t'es propre en chargeant toi-même l'Assembly dans ton code avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Assembly.LoadFrom(String path)
    .

  10. #10
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    ok merci pour tes reponses, je vais contacter le service des builders de ma compagnies pour leur dire qu'il va falloir prevoir un system de copy des DLL managé avec les executables managés lol

    par contre je me demande pourquoi les DLL managé sont gérés differement des autres DLLs. a priori si une DLL est dans le path de l'environment l'executable devrait la trouver non ?
    XXiemeciel

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Oui, c'est normal, ça fonctionne différemment.
    Tu peux lire cette page pour plus d'infos.

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

Discussions similaires

  1. Appeler une dll C# depuis VBA
    Par doudblast dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 17/08/2009, 15h07
  2. Appeler une dll ou un autre module vba depuis une macro excel vba
    Par technobiz dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/11/2008, 14h24
  3. Réponses: 5
    Dernier message: 08/08/2008, 14h48
  4. Appeler une DLL depuis Javascript
    Par troubleshooting dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/07/2008, 14h45
  5. Appeler une unité depuis une DLL
    Par xavier ringoise dans le forum Langage
    Réponses: 2
    Dernier message: 03/02/2006, 21h31

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