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

Bibliothèques C++ Discussion :

Probleme pour charger une DLL


Sujet :

Bibliothèques C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut Probleme pour charger une DLL
    Bonjour, je débute le c++ et je ne comprend absolument rien au chargement des DLL... Je cherche depuis 2 jours sur google, il y a 3000 posts sur le sujet et dans divers language mais je n'abouti a rien...

    Donc, j'expose mon probleme : Je doit utiliser les fonctions d'une DLL nommée memoire.dll. Je connais les fonctions de la DLL.

    J'aimerais utiliser la fonction "ReadInt(uint dwAddress)" de "memoire.dll".

    Je ne vous fait pas part de mon code qui ne fonctionne pas...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu ne dis pas ce que renvoie ReadInt, mais on va supposer que c'est un int.
    Ca se passe en quatre étapes :
    - tu déclares un pointeur de fonction
    - tu charges la dll
    - tu récupères le pointeur de fonction
    - tu appelles ta fonction


    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
    //Déclaration du pointeur de fonction
    typedef int (*ReadInt) (unsigned int);
    ReadInt ptrReadInt;
     
    //Chargement de la dll
    HINSTANCE hinst = LoadLibrary("C:\\chemin_de_la_dll\\memoire.dll");
    if(!hinst)
    {
      printf("Erreur au chargement\n");
      exit(1);
    }
     
    //Récupération du pointeur
    ptrReadInt = (ReadInt)GetProcAddress(hinst, "ReadInt");
    if(!ptrReadInt )
    {
      printf("Erreur de récupération du pointeur\n");
      exit(1);
    }
     
    //Appelle de la fonction
    unsigned int param=100;
    int ret = ptrReadInt(param);

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Une DLL pour être utilisable dans un projet doit possèder 2 autres fichiers, un fichier .lib et un fichier .h.

    As tu ces 2 fichiers supplémentaires ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ah oui, j'ai oublié qu'il y a deux façons d'utiliser une librairie : une statique (fichier lib) et une dynamique (fichier dll).
    La mienne est la dynamique, ram-0000 a l'air d'être parti sur la statique.

    La statique est plus simple à utiliser, puisque tu appelles tes fonctions de la dll comme si tu les avais déclarées dans le même programme. L'inconvénient c'est que si tu recompiles la dll, tu dois recompiler le programme appelant. De plus le programme occupera plus de place sur le disque.

    La dynamique est plus compliquée à utiliser, mais il n'y a pas besoin de recompiler l'appelant si tu recompiles la dll. Sauf si bien sûr tu modifies le prototype des fonctions exportées, car tes pointeurs de fonction ne seraient plus valides.
    Dernière modification par Invité ; 27/03/2009 à 16h51.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    donc je fais un gros copier/coller de ton code, mais j'obtiens des erreurs.

    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
    #include <stdio.h>
     
    int main()
    {
    //Déclaration du pointeur de fonction
    typedef int (*ReadInt) (unsigned int);
    ReadInt ptrReadInt;
     
    //Chargement de la dll
    HINSTANCE hinst = LoadLibrary("C:\\Documents and Settings\\Lablue\\Mes documents\\Visual Studio 2008\\Projects\\projet\\projet\\memoire.dll");
    if(!hinst)
    {
      printf("Erreur au chargement\n");
      exit(1);
    }
     
    //Récupération du pointeur
    ptrReadInt = (ReadInt)GetProcAddress(hinst, "ReadInt");
    if(!ptrReadInt )
    {
      printf("Erreur de récupération du pointeur\n");
      exit(1);
    }
     
    //Appelle de la fonction
    unsigned int param=100;
    int ret = ptrReadInt(param);
     
    return 0;
     
    }
    1>c:\documents and settings\lablue\mes documents\visual studio 2008\projects\projet\projet\dll.cpp(10) : error C2065: 'HINSTANCE'*: identificateur non déclaré
    1>c:\documents and settings\lablue\mes documents\visual studio 2008\projects\projet\projet\dll.cpp(10) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'hinst'
    1>c:\documents and settings\lablue\mes documents\visual studio 2008\projects\projet\projet\dll.cpp(10) : error C2065: 'hinst'*: identificateur non déclaré
    1>c:\documents and settings\lablue\mes documents\visual studio 2008\projects\projet\projet\dll.cpp(10) : error C3861: 'LoadLibrary'*: identificateur introuvable
    1>c:\documents and settings\lablue\mes documents\visual studio 2008\projects\projet\projet\dll.cpp(11) : error C2065: 'hinst'*: identificateur non déclaré
    1>c:\documents and settings\lablue\mes documents\visual studio 2008\projects\projet\projet\dll.cpp(14) : error C3861: 'exit'*: identificateur introuvable
    1>c:\documents and settings\lablue\mes documents\visual studio 2008\projects\projet\projet\dll.cpp(18) : error C2065: 'hinst'*: identificateur non déclaré
    1>c:\documents and settings\lablue\mes documents\visual studio 2008\projects\projet\projet\dll.cpp(18) : error C3861: 'GetProcAddress'*: identificateur introuvable
    1>c:\documents and settings\lablue\mes documents\visual studio 2008\projects\projet\projet\dll.cpp(22) : error C3861: 'exit'*: identificateur introuvable

    D'ou ca peut bien venir?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    Et non, c'est bien ça le problème. Je ne possède que le .dll

    J'ai lu qu'on pouvait dans certain cas regenerer le .lib mais je ne mis suis pas aventuré...

    La façon dynamique est certainement plus difficile mais une fois passé le cap, c'est comme tout, on en mange au pti dej

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bon, vire les lignes avec exit. Met un return ou ce que tu veux à la place pour gérer le cas ou ça marche pas.

    En dehors de ça il n'y a que deux problèmes, les autres erreurs en découlent.
    - il ne trouve pas le type HINSTANCE : ajoute #include "windows.h" en début de fichier.
    - il ne trouve pas les fonctions LoadLibrary et GetProcAddress. Normalement l'include de windows.h corrige ça aussi.

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Gastiflex Voir le message
    Ah oui, j'ai oublié qu'il y a deux façons d'utiliser une dll : une statique et une dynamique.
    La mienne est la dynamique, ram-0000 a l'air d'être parti sur la statique.

    La statique est plus simple à utiliser, puisque tu appelles tes fonctions de la dll comme si tu les avais déclarées dans le même programme. L'inconvénient c'est que si tu recompiles la dll, tu dois recompiler le programme appelant. De plus le programme occupera plus de place sur le disque.

    La dynamique est plus compliquée à utiliser, mais il n'y a pas besoin de recompiler l'appelant si tu recompiles la dll. Sauf si bien sûr tu modifies le prototype des fonctions exportées, car tes pointeurs de fonction ne seraient plus valides.
    DLL statique ??? Il n'y aurait pas comme une confusion.

    Il existe 2 types de bibliothèques, les biblothèques statiques et les biblothèques dynamiques.
    • Pour pouvoir utiliser dans un projet une bibliothèque statique, il faut le .lib et le .h de cette bibliothèque (ou les .lib et .h si la bibliothèques est composée de plusieurs biblithèques). Le .h est nécessaire pour compiler, le .lib est nécessaire pour linker.
    • Pour pouvoir utiliser dans un projet une bibliothèque dynamique, il faut le .dll, le .lib et le .h de cette bibliothèque (ou les .dll, .lib et .h si la bibliothèques est composée de plusieurs biblithèques). Le .h est nécessaire pour compiler, le .lib est nécessaire pour linker, le .dll est nécessaire pour l'exécution.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Invité
    Invité(e)
    Par défaut
    DLL statique ??? Il n'y aurait pas comme une confusion.
    Abus de langage plutôt. J'ai tendance à utiliser le mot dll à la place de librairie. Effectivement dll statique est un bel oxymore.

    Pour pouvoir utiliser dans un projet une bibliothèque dynamique, il faut le .dll, le .lib et le .h de cette bibliothèque (ou les .dll, .lib et .h si la bibliothèques est composée de plusieurs biblithèques). Le .h est nécessaire pour compiler, le .lib est nécessaire pour linker, le .dll est nécessaire pour l'exécution.
    Y a pas un erreur de copier coller ? Le .lib n'est pas néessaire en dynamique. Et le .h pas forcément. Il faut seulement quelle connaisse le prototype des fonctions exportées.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    Il ne reste plus qu'une erreur :

    1>c:\documents and settings\lablue\mes documents\visual studio 2008\projects\projet\projet\dll.cpp(12) : error C2664: 'LoadLibraryW'*: impossible de convertir le paramètre 1 de 'const char [104]' en 'LPCWSTR'
    1> Les types pointés n'ont aucun rapport entre eux*; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction

    Manque-t-il un paramètre dans LoadLibrary() ?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Non, c'est juste que dans tes paramètres de Visual Studio, t'es en Unicode. Si c'est important pour toi de rester en Unicode, stocke la variable qui contient le chemin de la dll dans une chaîne Unicode.
    Sinon, va dans les propriétés du projets, propriétés de configuration, général. A "jeu de caractères", tu mets "utiliser le jeu de caractères multioctets".

    EDIT !!!! J'ai oublié un truc. Quand t'as fini d'utiliser ta librairie, il faut la libérer. Ajoute à la fin du programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FreeLibrary(hinst);
    //Et même
    hinst=NULL;
    Dernière modification par Invité ; 27/03/2009 à 17h09.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    Encore une erreur... la derniere j'espere J'ai cherché sur google, ca a un rapport avec la fonction main mais je ne trouve pas de solution... Il parait aussi que ca peut venir de visual studio...

    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
    #include <stdio.h>
    #include <windows.h>
     
    //Déclaration du pointeur de fonction
    typedef int (*ReadInt) (unsigned int);
    ReadInt ptrReadInt;
     
    int main()
    {
    //Chargement de la dll
    HINSTANCE hinst = LoadLibrary("C:\\Documents and Settings\\Lablue\\Mes documents\\Visual Studio 2008\\Projects\\projet\\projet\\memoire.dll");
    if(!hinst)
    {
      printf("Erreur au chargement\n");
      exit(1);
    }
     
    //Récupération du pointeur
    ptrReadInt = (ReadInt)GetProcAddress(hinst, "ReadInt");
    if(!ptrReadInt )
    {
      printf("Erreur de récupération du pointeur\n");
      exit(1);
    }
     
    //Appelle de la fonction
    unsigned int param=100;
    int ret = ptrReadInt(param);
     
    return 0;
    }
    1>MSVCRTD.lib(crtexew.obj) : error LNK2019: symbole externe non résolu _WinMain@16 référencé dans la fonction ___tmainCRTStartup
    1>C:\Documents and Settings\Lablue\Mes documents\Visual Studio 2008\Projects\projet\Debug\projet.exe : fatal error LNK1120: 1 externes non résolus

  13. #13
    Invité
    Invité(e)
    Par défaut
    Oulah, je suis pas sûr que ça ait un rapport. Fait un "Regénérer tout" dans le doute.
    Ensuite je ne sais pas si les paramètres du main sont optionnels.
    Déclare ton main comme ça pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char* argv[])
    Si ça marche pas, commente tout le contenu du main sauf le return de la fin pour voir si ça vient du code que je t'ai donné.

    Il est de quel type ton projet ? Je viens d'en créer un, Application Win32, console, sans MFC, et avec ce code ça marche. Je suis sous Visual 2005 par contre, mais je ne pense pas que ça vienne de là.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    Je viens de recréer un projet Console, tout fonctionne. J'ai d'autres probleme mais pas dans le code

    Merci beaucoup en tt cas, des explications bien claires!

    Je vous dit merci mais pas a bientot, c'est sur que j'aurais encore des questions :p

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    En fait, j'aurais une derniere question.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //Récupération du pointeur
    ptrReadInt = (ReadInt)GetProcAddress(hinst, "ReadInt");
    if(!ptrReadInt)
    {
      printf("Erreur de récupération du pointeur\n");
      exit(1);
    }
    Si le message s'affiche, c'est qu'il y a un probleme lors de la recuperation du pointeur, mais ca signifie quoi? Que le prototype de ma fonction est erroné?

    Apparement, la DLL est chargée correctement, mais ca ne passe pas l'etape de la recuperation du pointeur.

  16. #16
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Gastiflex Voir le message
    Y a pas un erreur de copier coller ? Le .lib n'est pas néessaire en dynamique. Et le .h pas forcément. Il faut seulement quelle connaisse le prototype des fonctions exportées.
    Il y a 2 manières d'utiliser les DLL dans un projet (et là, je parle bien des bibliothèques dynamiques ).

    La plus simple, on utilise le .h et le .lib de la dll pour se linker avec. Le .h décrit les interfaces et les fonctions, le .lib est une bibliothèque presque vide qui permet de faire le link. Dans ce cas de figure, la DLL est chargée par le loader de programme lors de l'exécution, le loader sait quelle dll il doit charger car cette info est justement dans le .lib.

    La seconde manière, c'est quand on a 1 DLL et que l'on a pas ni le fichier .lib (par contre, on peut avoir le .h, c'est souvent plus simple ). Dans ce cas, il n'y a pas édition de lien avec la librairie presque vide (puisque l'on ne l'a pas) mais par contre, le programme doit faire un LoadLibrary() explicite et ensuite les GetProcAddress() pour récupérer les adresses des fonctions à appeler dans la DLL.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    A propos de ma dll, c'est en fait une classe. Dois-je creer une instance de cette classe pour pouvoir en utiliser les fonctions?

    je ne comprend pas bien comment fonctionne le systeme...

  18. #18
    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 : 49
    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
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    [*]Pour pouvoir utiliser dans un projet une bibliothèque dynamique, il faut le .dll, le .lib et le .h de cette bibliothèque (ou les .dll, .lib et .h si la bibliothèques est composée de plusieurs biblithèques). Le .h est nécessaire pour compiler, le .lib est nécessaire pour linker, le .dll est nécessaire pour l'exécution.[/LIST]
    Je dirais plutôt que pour une bibliothèque dynamique, il y a deux façon de faire :
    - Soit on se lie directement à elle, avec ses .h et sa bibliothèque .lib d'importation associée (à ne pas confondre avec un .lib classique de bibliothèque statique, ce .lib là et tout petit)
    - Soit on appelle dynamiquement ses fonctions, avec LoadLibrary et GetProcAddress. Dans se cas, il n'y a besoin que de la DLL et une spec de son contenu.
    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.

  19. #19
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    @JolyLoic C'est ce que j'avais rectifié dans un 2eme post (mais je ne voulais pas dans un premier temps parler de la 2eme méthode qui est plus ... touchy)

    J'aime bien le mot bibliothèque d'importation (et je pense maintenant que c'est le bon terme) pour le .lib associé à une DLL, je tacherai de m'en rappeler.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  20. #20
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par labluegirl Voir le message
    A propos de ma dll, c'est en fait une classe. Dois-je creer une instance de cette classe pour pouvoir en utiliser les fonctions?

    je ne comprend pas bien comment fonctionne le systeme...
    En fait, tu fois forcément avoir les headers associés si tu 'sais' que c'est une classe....

    Le fait est que la notion de 'classe' dépasse largement le système, et est au niveau du langage (C++). Pour l'OS, il n'y a qu'une librairie de fonctions, et de données (plus ou moins statiques).
    Dans le cas d'une classe C++ on aura par exemple les fonctions suivantes dans la DLL (c'est un exemple hein ! ):
    F8@MaClass_*A9
    F3@MaClass@ReadInt_*A1_23

    Le noms des fonctions sont dits "décorés", et là... pour utiliser la librairie de manière completement dynamique (LoadLibrary ...) je te souhaite bien du courage, d'autant que la décoration n'est pas un truc particulièrement "portable" d'un compilateur à un autre (même si tous tendent à suivre la norme "microsoftienne"). Une DLL C++ est donc assez difficile à utiliser sans le .lib associé (qui permet d'utiliser les classes/fonctions comme si elles étaient définies dans un .lib statique).

    La plupart du temps, on trouve des exports dits "C" (pour éviter la décoration justement), et d'un coup tout devient plus simple... Par contre, inutile de chercher une fonction membre dans ce type là.

    Donc:
    Ou bien ton ReadInt est une fonction membre d'une classe MaClasse, et là... je te conseille vivement de trouver le .lib (et les headers) associé à la DLL.
    Ou bien ton ReadInt est une fonction statique "C" (sans décoration), et là tu pourras utiliser facilement LoadLibrary / GetProcAddress ...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. System.load() pour charger une DLL : Droit admin nécessaires sous windows 7
    Par Tiberizz dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 07/02/2012, 12h58
  2. Réponses: 4
    Dernier message: 03/08/2007, 11h41
  3. Réponses: 1
    Dernier message: 18/07/2006, 16h44
  4. problemes pour creer une DLL
    Par enkisama dans le forum C++
    Réponses: 2
    Dernier message: 16/06/2006, 12h18
  5. Réponses: 2
    Dernier message: 08/08/2003, 17h30

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