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 :

Chargement dynamique dll en c++/cli sans dllImport


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Par défaut Chargement dynamique dll en c++/cli sans dllImport
    Bonjour à tous,

    J'aimerais charger des dll dynamiquement mais sans utiliser dllImport car je ne connais pas le nom de ma dll avant l'exécution du programme. Les séquences d'exécutions déterminent la dll à charger. Par contre les dll que je charge contiennent toutes une fonction exportée avec le même nom et le même canevas.

    J'ai trouvé des infos sur LoadLibrary mais si j'ai bien compris, je passe en unmanaged si j'utilise cette fonction.
    Malheureusement, je dois utiliser VC++ Express et j'ai cru comprendre que LoadLibrary est contenu dans les MFC (non géré par VC++ Express).

    Question subsidiaire : je dois programmer moi-même les dll, peut-on écrire des dll en C++/CLI ?

    Merci pour votre aide, je débarque un peu en C++/CLI

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Plio Voir le message
    J'ai trouvé des infos sur LoadLibrary mais si j'ai bien compris, je passe en unmanaged si j'utilise cette fonction.
    LoadLibraey est une fonction unmanaged, pour charger des bibliothèques unmaneged
    Citation Envoyé par Plio Voir le message
    Malheureusement, je dois utiliser VC++ Express et j'ai cru comprendre que LoadLibrary est contenu dans les MFC (non géré par VC++ Express).
    Pas du tout, c'est une fonction win32 de base. Il te faudra peut-être adjoindre le platform sdk pour y avoir accès.
    Citation Envoyé par Plio Voir le message
    Question subsidiaire : je dois programmer moi-même les dll, peut-on écrire des dll en C++/CLI ?
    En C++/CLI, tu peut générer des DLL managées (qui portent aussi le nom d'assembly en .NET), utilisables uniquement par du code managé (pas par LoadLibrary). La classe Assembly permet de charger dynamiquement ce genre de DLL.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Par défaut
    J'ai déjà la plateforme SDK installée.
    Dois-je ajouter un include pour trouver la fonction LoadLibrary ?

    J'ai trouvé une déclaration de LoadLibrary dans winBase.h mais si je le mets en include j'obtiens une tripotée d'erreurs (du genre symbole non défini comme ULONG_PTR par exemple, ou WINAPI : identificateur non décalré).
    Dois-je modifié la configuration de mon projet ? (actuel \clr).

    Je vais aussi essayer les assembly, ça me simplifiera la vie par après.

    Merci pour ton aide.

  4. #4
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut
    Declaré dans Winbase.h; inclure Windows.h.
    Lier avec la lib. Kernel32.lib.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Par défaut
    Merci ça marche avec Windows.h

    Par contre je ne comprends pas bien une chose. J'ai dû modifier une des propriétés de mon projet pour que cela fonctionne :

    => Propriétés Projet\Configuration\Général\Jeu de caractères
    paramètre de base : "Utiliser le jeu de cartères unicode"
    Pour que ça marche : "Non défini" ou "Utiliser le jeu de carctères multioctets"

    Ca m'est déjà arrivé dans un autre projet et j'aimerais comprendre ce que cela engendre. Il n'est jamais agréable de faire des choses sans comprendre pourquoi.
    Si qqun peut m'éclairer...

  6. #6
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Par défaut ton project est configuré pour utiliser de l'UNICODE. Ca a un impact sur la signature de certaines fonctions. Fait une recherche sur le forum Dev. Windows au sujet de UNICODE, ANSI et de la macro TEXT.

    Cela dit, GetProcAddress est une des rares exceptions a la regle, vu que les noms de fonctions sont exportées en ANSI seulement.

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

Discussions similaires

  1. [Dll] Chargement dynamique a base d'index
    Par Clorish dans le forum Langage
    Réponses: 20
    Dernier message: 25/03/2005, 14h19
  2. [MFC VC.NET] Chargement dynamique de DLL
    Par vanitom dans le forum MFC
    Réponses: 3
    Dernier message: 26/01/2005, 13h56
  3. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 13h20
  4. Dll a chargement dynamique
    Par delire8 dans le forum C++Builder
    Réponses: 7
    Dernier message: 05/06/2003, 22h47
  5. Chargement dynamique de DLL sous Unix
    Par Willou dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 18/12/2002, 18h25

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