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 :

Problème utilisation dll


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Par défaut Problème utilisation dll
    Bonjour,

    J'ai réalisé une dll et je souhaite la tester depuis un autre projet (VS2008).

    Ca c'est mon appli de test pour appeler la dll : http://pastebin.com/6sLcwjWB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // testlib1.cpp*: définit le point d'entrée pour l'application console.
    //
     
    #include "stdafx.h"
    #pragma comment (lib, "createmarker.lib")
    extern "C" __declspec(dllimport) int  createOneMarker(char *VCID_in);
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	createOneMarker("98385faf-7918-46d2-a663-4cc19e7f68cc");
    	return 0;
    }
    Et ça le .h de la dll en question : http://pastebin.com/b9Tsqxkx

    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
    // test_lib.h
    #pragma once
    //using namespace System;  // this had to be commented out
    namespace createmarker{
            public class createMarkers
            {
            // TODO: Add your methods for this class here.
            public:
    			 createMarkers(char *VCID)
                 :mCount(VCID)
                    {
                    }
    			 __declspec(dllexport) int createOneMarker(char *VCID_in);
            private:
                    char * mCount;
            };
    }
    Sachant que la fonction extraite est plutôt longue : http://pastebin.com/4J4cwyE3

    Mais je suis persuadé que l'erreur est dans le lien entre les deux premières parties. J'ai bien entendu ajouté dans le linker les lib et dll générées préalablement.

    Quelqu'un aurait-il une idée ?

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Peux-tu préciser ton problème ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Par défaut
    Oui forcément si je précise pas l'erreur ...

    1>testlib1.obj : error LNK2019: symbole externe non résolu __imp__createOneMarker référencé dans la fonction _wmain
    1>C:\Users\Schnapz\Desktop\testlib1\Debug\testlib1.exe : fatal error LNK1120: 1 externes non résolus

    Voilà.
    Désolé -_-

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 55
    Par défaut
    Je ne suis pas sur qu'on puisse appeler une méthode de DLL aussi facilement.

    Il me semble qu'il faut dans un premier temps charger la dll avec :

    HMODULE monModule = LoadLibrary("lib.dll");

    puis tu appel ta fonction

    resultat = (void*)GetProcAddress(monModule, "maFonction");

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Par défaut
    Bonjour,
    merci pour ta réponse. Je crois que je m'approche du résultat. Cela dit, dans ce que tu m'as donné, tu sauvegarde le résultat de la fonction dans une variable "résultat" alors que tu indique un (void*) ensuite (je te le dis car il me donne un message d'erreur).
    Ensuite, il faudrait que je passe un paramètre à ma fonction mais (void*)GetProcAddress(monModule, "createOneMarker("10")"); n'est pas reconnu. Il compile lorsque ce que j'enlève le paramètre, mais il n'a pas l'air de faire grand chose ensuite lors de l'exécution (il devrait me créer une image).
    Comment faire pour savoir s'il appelle bien la fonction de la dll ? Et comment lui faire passer un argument si c'est le cas ?

    Merci d'avance.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 55
    Par défaut
    Hm oui je suis allé un peu vite en besogne excuse moi.

    Remplaçons "resultat" par "fonction", ce sera bien plus cohérent.

    Ainsi on aurait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef int (*PFUNC)(void); // remplace int par le type de retour de ta fonction
     
    HMODULE monModule = LoadLibrary("lib.dll"); // On charge la dll
    PFUNC pFunc = (PFUNC)GetProcAddress(monModule, "maFonction"); // On récupère l'adresse de la fonction
    pFunc(); // On appel la fonction
    Dans le cas d'une fonction avec argument, tu n'as qu'à modifier ton type en fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef inf (*PFUNC)(int, float);
     
    ...
     
    pFunc(8, 3.14);

Discussions similaires

  1. Problème utilisation Dll créée en delphi dans une appli VB6
    Par Djelangelo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 25/01/2011, 15h48
  2. Problème utilisation DLL Inpout32
    Par stephantasy dans le forum Général VBA
    Réponses: 7
    Dernier message: 23/03/2010, 18h27
  3. Problème utilisation DLL VC++
    Par lio33 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 29/06/2007, 13h57
  4. problème utilisation dll
    Par od.dev dans le forum Delphi
    Réponses: 13
    Dernier message: 09/01/2007, 13h51
  5. Problème utilisation DLL
    Par Tub-95 dans le forum MFC
    Réponses: 4
    Dernier message: 02/11/2005, 12h00

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