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 :

Ajout d'une méthode dans une librairie


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut Ajout d'une méthode dans une librairie
    Bonjour à tous!

    Je suis en train de développer une application qui gère des imprimantes à cartes sans contact.
    Par conséquent j'utilise une librairie que j'importe dans mon projet C++ sous visual studio 6.0.

    L'import de la librairie de base fonctionne très bien, mais ce qui me dérange c'est qu'il existe une méthode ULTRA limitée dans cette librairie.
    Heureusement, dans le pack de développement fourni par cette marque (Evolis), il y a moyen de compiler ses propres librairies statiques et dynamiques.

    Là où cela me pose un problème, c'est que je tombe SYSTÉMATIQUEMENT sur un os nommé OpenBmp.

    Cette fonction est définie dans un .cpp du projet permettant de compiler la librairie, mais nul part est fait mention de son prototype.
    C'est à dire que toutes les autres fonctions sont définies à la fois dans un .h central, et dans des cpp. Mais cette fonction n'est définie QUE dans un cpp.

    Voici le contenu du .h central:
    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
     
    #ifdef EVOLIB_EXPORTS
    #define EVOLIB_API __declspec(dllexport)
    #else
    #define EVOLIB_API __declspec(dllimport)
    #endif
     
    extern EVOLIB_API BOOL OpenBmp(char * ,unsigned char * , long *);
    extern EVOLIB_API void KinYMC(unsigned char *lpMem,long Height, long Width);
    extern EVOLIB_API BOOL ConvertRVBtoK(unsigned char *lpbRVB,long RVBSize,long Height,long Width,unsigned char *lpBlack,unsigned char type);
     
    extern EVOLIB_API int DB32NC(unsigned char * lpMem, long lPos, char color, unsigned char *ucCommand, long lCommandSize, int bPartial, long Min, long Max);
    extern EVOLIB_API int DB64NC(unsigned char * lpMem, long lPos, char color, unsigned char *ucCommand, long lCommandSize, int bPartial, long Min, long Max);
    extern EVOLIB_API int DB128NC(unsigned char * lpMem, long lPos, char color, unsigned char *ucCommand, long lCommandSize, int bPartial, long Min, long Max);
    //extern EVOLIB_API int DB2NC(unsigned char * lpMem, long lPos, char pannel, unsigned char *ucCommand, long lCommandSize);
    extern EVOLIB_API int DB2NC(unsigned char * lpMem, long lPos, char pannel[10], unsigned char *ucCommand, long lCommandSize);
     
    extern EVOLIB_API int DB32C(unsigned char * lpMem, long lPos, char color, unsigned char *ucCommand, long lCommandSize, int bPartial, long Min, long Max);
    extern EVOLIB_API int DB64C(unsigned char * lpMem, long lPos, char color, unsigned char *ucCommand, long lCommandSize, int bPartial, long Min, long Max);
    extern EVOLIB_API int DB128C(unsigned char * lpMem, long lPos, char color, unsigned char *ucCommand, long lCommandSize, int bPartial, long Min, long Max);
    //extern EVOLIB_API int DB2C(unsigned char * lpMem, long lPos, char pannel, unsigned char *ucCommand, long lCommandSize);
    extern EVOLIB_API int DB2C(unsigned char * lpMem, long lPos, char pannel[10], unsigned char *ucCommand, long lCommandSize);
    Et la méthode qui est utilisé, et que je voudrais modifier est définie comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EVOLIB_API BOOL OpenBmp(char *pPathFile, unsigned char *pMem, long *dwSizeNeeded, BITMAPINFOHEADER	*InfoHead)
    Je dois avouer une chose, malgré mes quelques années d'expérience de développeur, je n'ai que trop peu manipulé des librairies (qu'elles soient statiques, ou dynamiques), mais j'ai beau tourner dans tous les sens, je ne vois pas pourquoi la librairie pré-compilé fonctionne avec un appel de OpenBmp à 4 arguments, et pas celle que je compile moi-même.

    Où dois je déclarer cette foutue fonction pour arriver au même résultat que la librairie pré-compilée.

    Et enfin, la chose la plus dingue à mon gout, il semblerait que je n'ai pas à toucher le .h central, car c'est celui que j'utilise dans le projet qui compile (contenant lui-même la librairie pré-compilée)

    J'espère avoir donné tous les éléments.

    Merci d'avance à tous de votre aide.

    PS: J'ai beaucoup à apprendre, et je ne demande que ça.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je me suis un peu perdu, est ce le corps de la fonction OpenBMP qui est manquant ou juste son prototype ?
    Car si c'est le corps, cela risque de poser un problème ( à moins que cela vienne d'une autre bibliothèque ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    Non, le corps est bien défini dans un des fichiers qui sert à la compilation de la librairie.
    Là où je ne comprends pas c'est que j'ai un fichier .h qui contient toutes sortes de méthodes + OpenBmp définie avec 3 paramètres.

    Dans mon projet, j'utilise ce fichier .h
    La librairie qui est censée être rattachée à ce .h
    Et dans le projet, il y a un OpenBmp avec 4 paramètres.

    COMMENT EST-CE POSSIBLE???

    La librairie est codée en C, alors comment puis je avoir une quelconque forme de polymorphisme?
    C'est vrai, le compilateur est celui de Visual Studio 6.0, mais cette méthode ne semble être définies QUE dans la librairie : Comment?

    Au secours! je pensais avoir des connaissances en programmation mais là je me sens totalement largué

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut Fantomchris

    Tu utilises une librairie en C, et ne peux par conséquent pas surcharger la méthode, qui est en fait une fonction. D'ailleurs, vu qu'elle est utilisée partout et est centrale, les gens qui ont conçu la librairie ne l'ont sûrement pas fait de sorte qu'elle soit remplacée. Je crains que tu ne doives trouver une autre méthode pour atteindre ton but.
    Find me on github

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    C'est sûrement simplement une erreur de la société qui fournit le pack de développement, tu devrais plutôt les contacter directement.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    Après inspection, il semblerait effectivement qu'il y ait une bidouille quelque part car j'ai bien les bon noms de fonctions (j'arrive à compiler la librairie avec le OpenBmp à 4 paramètres), mais lorsque j'en fais l'importation dans mon projet, il me dit qu'il ne trouve pas la méthode avec 4 paramètres, mais seulement celle avec 3 (qui n'est plus censée être dans la librairie compilée)
    ...
    ...
    ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Bmp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl OpenBmp(char *,unsigned char *,long *,struct tagBITMAPINFOHEADER *)" (__imp_?OpenBmp@@YAHPADPAEPAJPAUtagBITMAPINFOHEADER@@@Z)
    Bmp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl DB32NC(unsigned char *,long,char,unsigned char *,long,int,long,long)" (__imp_?DB32NC@@YAHPAEJD0JHJJ@Z)
    Bmp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl DB64NC(unsigned char *,long,char,unsigned char *,long,int,long,long)" (__imp_?DB64NC@@YAHPAEJD0JHJJ@Z)
    Bmp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl DB128NC(unsigned char *,long,char,unsigned char *,long,int,long,long)" (__imp_?DB128NC@@YAHPAEJD0JHJJ@Z)
    Bmp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl DB2NC(unsigned char *,long,char * const,unsigned char *,long)" (__imp_?DB2NC@@YAHPAEJQAD0J@Z)
    Bmp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl DB32C(unsigned char *,long,char,unsigned char *,long,int,long,long)" (__imp_?DB32C@@YAHPAEJD0JHJJ@Z)
    Bmp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl DB64C(unsigned char *,long,char,unsigned char *,long,int,long,long)" (__imp_?DB64C@@YAHPAEJD0JHJJ@Z)
    Bmp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl DB128C(unsigned char *,long,char,unsigned char *,long,int,long,long)" (__imp_?DB128C@@YAHPAEJD0JHJJ@Z)
    Bmp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl DB2C(unsigned char *,long,char * const,unsigned char *,long)" (__imp_?DB2C@@YAHPAEJQAD0J@Z)
    Bmp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl ConvertRVBtoK(unsigned char *,long,long,long,unsigned char *,unsigned char)" (__imp_?ConvertRVBtoK@@YAHPAEJJJ0E@Z)
    Bmp.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) void __cdecl KinYMC(unsigned char *,long,long)" (__imp_?KinYMC@@YAXPAEJJ@Z)

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Je rejoins Laurent en te conseillant de contacter la société qui te fournit ce toolkit.
    Find me on github

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unresolved external symbol "__declspec(dllimport)
    C'est un peu trop facile, et en plus, le temps qu'ils me répondent, je vais pouvoir recoder toute mon appli.

    Cette erreur là me dit quelque chose, et je suis sur d'avoir déjà réussi à m'en débarrasser : mais ou et comment...

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pour les erreurs d'édition de liens, c'est sûrement un problème de configuration de ton côté (symbole préprocesseur à définir ou autre).

    Mais pour la déclaration de fonction qui ne correspond pas à la définition, c'est clairement un oubli de la part des développeurs. Si tu ne peux pas avoir de support de leur part alors pas de chance pour toi... J'espère que tu n'as pas payé ce produit.

Discussions similaires

  1. modifier un élément d'une form dans une méthode d'une autre form
    Par baldebaran dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/08/2009, 13h59
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. Réponses: 3
    Dernier message: 29/04/2008, 14h14
  4. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  5. "ajouter une méthode dans une méthode"
    Par Zorgloub dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2006, 12h53

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