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

Visual C++ Discussion :

[Debutant] Utilisation DLL


Sujet :

Visual C++

  1. #1
    Membre du Club Avatar de PKO06
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 91
    Points : 65
    Points
    65
    Par défaut [Debutant] Utilisation DLL
    Bonjour,

    J'essaye d'utiliser des fonctions contenues dans une dll.

    Je ne dispose que de la dll, pas de .def ni de .h. J'essaye donc lier explicitement la dll à mon executable.

    J'essaye pour le moment de faire ca en mode console.

    Voila le code :
    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
    #include <Windows.h>
    #include <stdio.h>
     
    typedef long (__cdecl *MYDLLFUNC)();
     
    int main()
    {
    	long returnValue;
     
    	HMODULE hmod;
    	MYDLLFUNC dllfunc;
     
    	hmod = LoadLibrary(TEXT("C:\\Program Files\\VIDAL\\Communs\\Vidal32.dll"));
     
    	dllfunc = (MYDLLFUNC)GetProcAddress(hmod,"VDL_Ini");
    	if(dllfunc){
    		returnValue = dllfunc();
    	}
     
    	printf("%s\n",returnValue);
     
    	if(hmod)
    		FreeLibrary(hmod);
     
    	return 0;
    }
    Voici la référence à la fonction VDL_Ini : VDL_Ini.html

    J'utilise Visual C++ express 2005. Je ne sais pas si il y à moyen de faire référernce à la dll d'une autre manière.

    Je bloque réellement sur ce code, quelqu'un pourrait il m'indiquer mes erreurs ?
    Je vous remercie

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    c'est une dll au sens win32
    ou bien c'est une assembly au sens .net ?

    tu n'arrives pas à charger avec loadlibrary ?

  3. #3
    Membre du Club Avatar de PKO06
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    Je pense que c'est une dll au sens win32, je n'ai pas d'autre informations ...

    Lorsque que j'execute j'obtiens ce message d'erreur : "Unhandled exception at 0x005f31f0 in VidalConsole.exe: 0xC0000005: Access violation reading location 0x00000000."

    Mon code est une transposition de ce que j'ai pu trouver sur msdn.

    Je cherche mais j'aimerais être sur que je vais dans la bonne direction ...

  4. #4
    Membre du Club Avatar de PKO06
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    Ce serait à priori la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dllfunc = (MYDLLFUNC)GetProcAddress(hmod,"VDL_Ini");
    qui pose problème.

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    GetProcAddress renvoie null ?
    dans ton code tu ne testes pas LoadLibrary .
    que vaut hmod ?

  6. #6
    Membre du Club Avatar de PKO06
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    hmod vaut : "hmod = 0x00420000 {unused=9460301 }"
    Comment tester loadlibrary ? je fait une boucle if qui engobe celle ou je test dllfunc ?
    J'ai vu que j'avais ce message dans l'onglet "Modules" en mode debug : Vidal32.exe : "The module did not load at the default Load address".

    Merci beaucoup pour votre aide.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 588
    Points
    41 588
    Par défaut
    Et ta fonction VDL_Ini est bien en __cdecl, et avec cette casse-là?
    Si c'est le cas, essaie avec "_VDL_Ini".
    (Et si la fonction est en __stdcall, essaie avec "_VDL_Ini@0").


    Edit: VDL_Ini est en WINAPI, qui signifie __stdcall, et elle prend un paramètre char*.

    Remplace __cdecl par WINAPI, utilise le nom "_VDL_Ini@4" ça devrait marcher (sauf peut-être sur une architecture 64bits)

  8. #8
    Membre du Club Avatar de PKO06
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    Merci à tous en particulier à Medinoc.
    Ce qui semblait poser erreur était le __cdecl. J'ai bien essayer de comprendre sur MSDN mais j'apprecie réellement ce genre d'explications :
    VDL_Ini est en WINAPI, qui signifie __stdcall, et elle prend un paramètre char*.
    Je n'ai pas eu besoin de changer "VDL_INI" en "_VDL_Ini@4" .

    J'identifie aussi un de mes gros problèmes qui est la gestion des arguments mis en paramètres de fonctions (j'ai peur d'utiliser des termes inexacts) surtout lorsque se sont des pointeurs.
    Si d'ailleurs vous me proposer un tuto la dessus je suis preneur.

    Merci @bientôt

  9. #9
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Vidal32.DLL
    Bonjour Tout le Monde !
    Voilà, Je suis à la Recherche d'une Documentation des Fonctions exportées par Vidal32.dll (paramétres,types et nombre). Merci par avance.

  10. #10
    Membre confirmé Avatar de toxcct
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 434
    Points : 511
    Points
    511
    Par défaut
    utilise Dependency Walker (depends.exe) pour savoir tout ce qui est exporté par la DLL.

    pour la doc... google est ton ami. sinon, ben c'est que yen a pas, ou qu'elle n'est pas gratuite.

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

Discussions similaires

  1. [DEBUTANT] Utiliser une dll
    Par PKO06 dans le forum Débuter
    Réponses: 2
    Dernier message: 20/10/2006, 11h36
  2. [Debutant] Utilisation OCX/Dll
    Par Clorish dans le forum Général Java
    Réponses: 2
    Dernier message: 21/02/2006, 20h21
  3. [VB6] Utiliser dll .Net dans VB6
    Par sokette dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 31/03/2005, 15h34
  4. Utiliser Dll Delphi
    Par smyley dans le forum MFC
    Réponses: 9
    Dernier message: 12/03/2005, 19h21
  5. [D8] Utilisation dll D7 sous D8
    Par smyley dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 01/11/2004, 12h28

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