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

VC++ .NET Discussion :

[Linkage] Ma librairie ne semble pas incluse


Sujet :

VC++ .NET

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut [Linkage] Ma librairie ne semble pas incluse
    Bonjour

    Je compile sous VC++ Express un projet qui a besoin de 2 librairies que j'ai préalablement compilé et linké avec succès : cppUnit et une autre de ma composition (microLib.dll et microLib.lib).
    Mais, dans mon projet, malgré les ajouts des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #pragma comment (lib, "microLib.lib")
    Et le fait que j'ai ajouté le path de mes fichiers .lib dans les options de link de VC++ Express, je me prends en masse des erreurs du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    1>StableRegionTest.obj : error LNK2019: unresolved external symbol "public: void __thiscall Spectrum::addPoint(class Dot const &)" (?addPoint@Spectrum@@QAEXABVDot@@@Z) referenced in function "private: void __thiscall StableRegionTest::addPoints(class Spectrum &)" (?addPoints@StableRegionTest@@AAEXAAVSpectrum@@@Z)
    J'ai l'impression que ma librairie n'est pas incluse dans le linkage
    Est-ce cela ? Comment résoudre ce problème ?

    Merci d'avance de vos réponses.

    @++

  2. #2
    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
    Je pense que la fonction qui manque (ou la classe qui la contient) n'est pas déclarée en dllimport/dllexport.
    En effet, le nom "décoré" d'une fonction en dllimport commence toujours par __imp...

  3. #3
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Bonjour Medinoc

    Merci de ta réponse. Pardon de poser cette question bête mais autant je compile pratiquement tout le temps en C sous Unix mais sous VC++Express, je suis complètement débutant. Donc, comment effectuer l'opération que tu me préconises ?
    Merci d'avance.

    @++

  4. #4
    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
    Si tu as créé ta DLL avec les assistants de Visual, tu as sans doute un fichier d'en-tête définissant une macro NOMDELADLL_API qui vaut soit __declspec(dllexport), soit __declspec(dllimport).

    Il faut alors que tu précèdes la déclaration de ta classe de cette macro, et que tu recompiles la DLL et ton programme.
    J'utilise peu le C++ dans les DLL, mais ça devrait marcher.

  5. #5
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Et dans le cas contraire ?
    Parce que je n'ai pas utilisé d'assistant pour faire tout ça.
    Dieu que Visual C++ Express est compliqué à appréhender !
    Je te remercie encore de ton aide Medinoc.

    @++

  6. #6
    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
    Dans ce cas, écrit un fichier d'en-tête de ce genre:
    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
    /*
    NomDeLaDll.h
    */
    #ifndef H_NOMDELADLL
    #define H_NOMDELADLL
     
    /* extern "C" : Pour les fonctions C et C++ accessibles dans les deux langages */
    #ifndef EXTERN_C
    #ifdef __cplusplus
    #define EXTERN_C extern "C"
    #else
    #define EXTERN_C extern
    #endif
    #endif
     
    /* NOMDELADLL_API : Pour dllimport/export */
    #ifdef BUILDING_NOMDELADLL
    #define NOMDELADLL_API __declspec(dllexport)
    #else
    #define NOMDELADLL_API __declspec(dllimport)
    #endif
     
    #endif /* ! H_NOMDELADLL */
    Ce fichier est comme celui généré de base par Visual, mais avec la macro EXTERN_C en plus, car elle est pratique.

    Ensuite, tu n'as plus qu'à déclarer les fonctions et classes:
    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
    /*
    ClasseSpectrum.hpp
    */
    #ifndef __cplusplus
    #error This file is for C++ only
    #endif
     
    #ifndef H_CLASSESPECTRUM
    #define H_CLASSESPECTRUM
     
    #include "NomDeLaDll.h"
     
    class NOMDELADLL_API Spectrum
    {
    public:
        void addPoint(Dot const &);
    };
     
    #endif // H_CLASSESPECTRUM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*
    Fonctions .h
    */
    #include "NomDeLaDll.h
     
    #ifndef H_FONCTIONS
    #define H_FONCTIONS
     
    EXTERN_C NOMDELADLL_API int __stdcall UneFonction(char const *);
    EXTERN_C NOMDELADLL_API double __stdcall UneAutreFonction(int);
     
    #endif /* ! H_FONCTIONS */
    Cela devrait suffire. Si ce n'est pas suffisant, il faudra ajouter NOMDELADLL_API devant chaque définition de fonction dans le .cpp (mais je ne crois pas que ce soit nécessaire).

    À présent, le tour de magie:
    Dans les options du projet de ta DLL, tu ajoutes dans "preprocessor definitions" la macro BUILDING_NOMDELADLL (et uniquement dans ce projet-là!). Ainsi, les classes et fonctions exportées seront déclarées en dllexport dans la DLL et en dllimport partout ailleurs.

  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
    Au fait : Je n'ai pas testé, pas compilé, donc il peut toujours y avoir des fautes de frappe...

  8. #8
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Oki, merci Médinoc, je trouve la solution vraiment compliqué et très différente par rapport à ce que je faisais sous unix. Sans doute est-ce dû au fait que je passe au développement sous Visual C++
    En tout cas merci à toi.
    Je vais essayer de travailler sur un code plus petit pour faire mes appels librairies. Si ça capote, je tiendrais au courant.

    @++

  9. #9
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Bon, et bien, même punition sur ce minicode :
    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
     
    #pragma comment(lib, "microLib.lib")
     
    #include <iostream>
    #include "Spectrum.hpp"
    #include <cmath>
     
    int main(int argc, char*argv[]){
    	srand(NULL);
    	Spectrum s = Spectrum();
    	for(int i=0; i<6384; i++){
    		s.addPoint(Dot(rand(), rand()));
    	}
    	return 0;
    }
    Voici les erreurs au linkage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1>Test.obj : error LNK2019: unresolved external symbol "public: void __thiscall Spectrum::addPoint(class Dot const &)" (?addPoint@Spectrum@@QAEXABVDot@@@Z) referenced in function _main
    1>Test.obj : error LNK2019: unresolved external symbol "public: __thiscall Dot::Dot(double,double)" (??0Dot@@QAE@NN@Z) referenced in function _main
    1>Test.obj : error LNK2019: unresolved external symbol "public: __thiscall Spectrum::Spectrum(void)" (??0Spectrum@@QAE@XZ) referenced in function _main
    Je ne comprends plus rien !
    Finalement, je me demande si j'ai bien compilé comme il faut ma librairie microLib

    @++

  10. #10
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Si quelqu'un peut m'aider, il est le bienvenue car je crois que le problème vient de la librairie que je veux inclure. Voici sa ligne de compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /O2 /GL /I "C:\Program Files\Microsoft Platform SDK\Include" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "_WINDLL" /D "_MBCS" /FD /EHsc /MD /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /Zi /TP /errorReport:prompt
    Et sa ligne de linkage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /OUT:"C:\Documents and Settings\dbourgais\Mes documents\Coding\µLib-Visual\µLib\Release\microLib.dll" /NOLOGO /LIBPATH:"C:\Program Files\Microsoft Platform SDK\Lib" /DLL /MANIFEST /MANIFESTFILE:"Release\microLib.dll.intermediate.manifest" /DEBUG /PDB:"c:\Documents and Settings\dbourgais\Mes documents\Coding\µLib-Visual\µLib\release\microLib.pdb" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /LTCG /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib
    Merci à toute bonne âme qui m'aidera.

    @++

  11. #11
    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
    Je ne vois pas le /D "BUILDING_MICROLIB" qui devrait avoir été automatiquement ajoué en ligne de commande si tu l'avais mis dans les options du projet...

    Et tu as déclaré la classe Spectrum en MICROLIB_API ?

  12. #12
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Euuuhhhh, je ne sais pas.
    Franchement, je débute complètement sous VC++ Express et j'ai l'impression de ne rien comprendre à ce machin.
    Donc, comment fait-on pour ajouter ces options que tu me décris ?
    Je précise que je travaille sur un simple portage d'un code C++ Unixien vers Windows (le code étant écrit en C++ STL standard de chez standard).
    Je te remercie en tout cas de ta patience, Médinoc.

    @++

  13. #13
    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
    Project Properties -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor definitions.

    Et ne pas oublier de régler ça pour toutes les configurations, pas seulement Release ou Debug.


    Et pour la déclaration de la classe Spectrum, il faut la modifier dans son fichier d'en-tête.

  14. #14
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Ok, j'ai fait la modification comme tu l'as indiqué. Voici la nouvelle ligne de compilation de ma librairie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /O2 /GL /I "C:\Program Files\Microsoft Platform SDK\Include" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "_CRT_SECURE_NO_DEPRECATE" /D "BUILDING_MICROLIB" /D "_WINDLL" /D "_MBCS" /FD /EHsc /MD /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /Zi /TP /errorReport:prompt
    Et malgré cela, j'ai toujours les mêmes erreurs
    Comprends plus rien à rien, j'en perds mon C++

    @++

  15. #15
    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
    Tu peux poster le header de la lib, ainsi que celui de la classe Spectrum ?

    Tout est dans le header, dans ce genre de circonstances.


    Tu es sûr que tu n'as pas deux versions différentes du header ? Ça m'est déjà arrivé, ce genre de c***erie...


    PS: Si le nom décoré des fonctions de met à commencer par "__imp_", on aura résolu le problème de header.

  16. #16
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Voici le Header de Spectrum.hpp
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
     
    #ifndef SPECTRUM_HPP_
    #define SPECTRUM_HPP_
     
    #include <vector>
    #include <limits>
    #include <string>
    #include "Dot.hpp"
    #include "Curve_Generic.hpp"
    #include "stdafx.h"
     
    /**
     * 
     * This class will describe what is a spectrum and all the methods applied on this object.
     * 
     * @author BioXpr
     *
     */
    /**All the points which make a spectrum*/
    class Spectrum: public std::vector<Dot>
    {
    	public:
     
    		typedef std::vector<Spectrum> SpectrumArray;
     
    		/**Constructor of the class*/
    		Spectrum();
     
    		/**
                     * 
                     * @param point
                     */
    		/**
                     * Adding a Dot in the spectrum
                     */
    		void addPoint(const Dot& point);
     
    		/**
                     * 
                     * @param index
                     * @return Dot
                     */
    		/**
                     * Returns a Dot at the located index.
                     */
    		Dot getPoint(size_t index) const;
     
    		/**
                     * 
                     * @param index
                     * @param dot
                     */
    		/**
                     * Replaces the Dot located at the given index by another Dot.
                     */
    		void setPoint(size_t index, const Dot& dot);
     
    		/**
                     * 
                     * @return int
                     */
    		/**
                     * Returns the number of Dots.
                     */
    		size_t countPoints() const;
     
    		/**
                     * 
                     * @return java.util.ArrayList
                     */
    		/**
                     * Returns the ArrayList which contains all the Dots of the spectrum.
                     */
    		Spectrum getSpectrum() const;
     
    		/**
                     * An equivalent of array_shift in PHP.
                     *
                     */
    		void shiftSpectrum();
     
    		/**
                     * 
                     * @param point
                     */
    		/**An equivalent of array_shift in PHP.*/
    		void unshiftSpectrum(Dot point);
     
    		/**
                     * An equivalent of array_pop in PHP.
                     *
                     */
    		void popSpectrum();
     
    		/**
                     * 
                     * @param index
                     */
    		/**
                     * Removes a Dot at the located index.
                     */
    		void removePoint(size_t index);
     
    		/**
                     * An equivalent of unset in PHP
                     *
                     */
    		void destroySpectrum();
     
    		/**
                     * 
                     * @param curve
                     * @return Spectrum
                     */
    		/**
                     * Returns a spectrum for the given curve.
                     */
    		Spectrum drawCurve(const Curve_Generic& curve) const;
     
    		/**
                     * 
                     * @return Dot
                     */
    		/**
                     * Returns the Dot with the higher Y coordinates
                     */
    		Dot getMaxYPoint() const;
     
    		size_t getMaxYPointIndex() const;
     
    		/**
                     * 
                     * @param list
                     * @param cutoff
                     * @param steps
                     * @param disableAuto
                     * @return java.util.ArrayList
                     */
    		/**
                     * Splits the spectrum into other spectrum for the given cut-off.<br/>
                     * Splitted spectra are stored into a returned ArrayList.
                     */
    		SpectrumArray splitSpectrum(const Spectrum& list, double cutoff, std::string steps, bool disableAuto) const;
     
    		/**
                     * Clone the spectrum
                     */
    		Spectrum clone() const;
     
    /*	
    	private:
     
    		std::vector<Dot> points;
    */
    };
     
    #endif /*SPECTRUM_HPP_*/
    Voili voulou.

    GLDavid, qui devient fou

    @++

  17. #17
    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
    Tu n'as rien fait de ce que je t'ai conseillé, en fait.

    Rajoute un header nommé MicroLib.h (ou tartempion.h si tu préfères) comme celui de mon troisième post, en respectant le nom des macros (remplace NOMDELADLL par MICROLIB).

    Ensuite, inclus ce header dans spectrum.hpp et déclare ta classe Spectrum en MICROLIB_API comme de te l'ai montré dans mon troisième post...

  18. #18
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Ok, je vais faire ça. Désolé, mais VC++ Express me donne l'impression de ne rien faire de standard par rapport à ce que j'ai vu auparavant. Je crois que je n'aime pas cet IDE.
    Merci en tout cas et navré d'avoir mal compris.

    @++

  19. #19
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Bon, j'ai fait ce que tu m'as dit. Voici mes nouveaux fichiers dans ma lib.
    microLib.hpp :
    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
     
    /*
    MICROLIB.hpp
    */
    #ifndef H_MICROLIB
    #define H_MICROLIB
     
    /* extern "C" : Pour les fonctions C et C++ accessibles dans les deux langages */
    #ifndef EXTERN_C
    #ifdef __cplusplus
    #define EXTERN_C extern "C"
    #else
    #define EXTERN_C extern
    #endif
    #endif
     
    /* NOMDELADLL_API : Pour dllimport/export */
    #ifdef BUILDING_MICROLIB
    #define MICROLIB_API __declspec(dllexport)
    #else
    #define MICROLIB_API __declspec(dllimport)
    #endif
     
    #endif /* ! H_MICROLIB */
    Et la nouvelle déclaration de Spectrum.hpp :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
     
    #ifndef __cplusplus
    #error This file is for C++ only
    #endif
     
    #ifndef SPECTRUM_HPP_
    #define SPECTRUM_HPP_
     
    #include "microLib.hpp"
     
    #include <vector>
    #include <limits>
    #include <string>
    #include "Dot.hpp"
    #include "Curve_Generic.hpp"
    #include "stdafx.h"
     
    /**
     * 
     * This class will describe what is a spectrum and all the methods applied on this object.
     * 
     * @author BioXpr
     *
     */
    /**All the points which make a spectrum*/
    MICROLIB_API class Spectrum: public std::vector<Dot>
    {
    	public:
     
    		typedef std::vector<Spectrum> SpectrumArray;
     
    		/**Constructor of the class*/
    		Spectrum();
     
    		/**
                     * 
                     * @param point
                     */
    		/**
                     * Adding a Dot in the spectrum
                     */
    		void addPoint(const Dot& point);
     
    		/**
                     * 
                     * @param index
                     * @return Dot
                     */
    		/**
                     * Returns a Dot at the located index.
                     */
    		Dot getPoint(size_t index) const;
     
    		/**
                     * 
                     * @param index
                     * @param dot
                     */
    		/**
                     * Replaces the Dot located at the given index by another Dot.
                     */
    		void setPoint(size_t index, const Dot& dot);
     
    		/**
                     * 
                     * @return int
                     */
    		/**
                     * Returns the number of Dots.
                     */
    		size_t countPoints() const;
     
    		/**
                     * 
                     * @return java.util.ArrayList
                     */
    		/**
                     * Returns the ArrayList which contains all the Dots of the spectrum.
                     */
    		Spectrum getSpectrum() const;
     
    		/**
                     * An equivalent of array_shift in PHP.
                     *
                     */
    		void shiftSpectrum();
     
    		/**
                     * 
                     * @param point
                     */
    		/**An equivalent of array_shift in PHP.*/
    		void unshiftSpectrum(Dot point);
     
    		/**
                     * An equivalent of array_pop in PHP.
                     *
                     */
    		void popSpectrum();
     
    		/**
                     * 
                     * @param index
                     */
    		/**
                     * Removes a Dot at the located index.
                     */
    		void removePoint(size_t index);
     
    		/**
                     * An equivalent of unset in PHP
                     *
                     */
    		void destroySpectrum();
     
    		/**
                     * 
                     * @param curve
                     * @return Spectrum
                     */
    		/**
                     * Returns a spectrum for the given curve.
                     */
    		Spectrum drawCurve(const Curve_Generic& curve) const;
     
    		/**
                     * 
                     * @return Dot
                     */
    		/**
                     * Returns the Dot with the higher Y coordinates
                     */
    		Dot getMaxYPoint() const;
     
    		size_t getMaxYPointIndex() const;
     
    		/**
                     * 
                     * @param list
                     * @param cutoff
                     * @param steps
                     * @param disableAuto
                     * @return java.util.ArrayList
                     */
    		/**
                     * Splits the spectrum into other spectrum for the given cut-off.<br/>
                     * Splitted spectra are stored into a returned ArrayList.
                     */
    		SpectrumArray splitSpectrum(const Spectrum& list, double cutoff, std::string steps, bool disableAuto) const;
     
    		/**
                     * Clone the spectrum
                     */
    		Spectrum clone() const;
     
    /*	
    	private:
     
    		std::vector<Dot> points;
    */
    };
     
    #endif /*SPECTRUM_HPP_*/
    La compilation provoque des warnings mais sans conséquences sur le link final de la librairie.
    En revanche, si je compile mon exécutable qui appelle cette librairie, j'ai toujours les erreurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    1>c:\documents and settings\dbourgais\mes documents\coding\µlib-visual\spectrum.hpp(160) : warning C4091: '__declspec(dllimport)' : ignored on left of 'Spectrum' when no variable is declared
    1>Compiling manifest to resources...
    1>Linking...
    1>Test.obj : error LNK2019: unresolved external symbol "public: void __thiscall Spectrum::addPoint(class Dot const &)" (?addPoint@Spectrum@@QAEXABVDot@@@Z) referenced in function _main
    1>Test.obj : error LNK2019: unresolved external symbol "public: __thiscall Dot::Dot(double,double)" (??0Dot@@QAE@NN@Z) referenced in function _main
    1>Test.obj : error LNK2019: unresolved external symbol "public: __thiscall Spectrum::Spectrum(void)" (??0Spectrum@@QAE@XZ) referenced in function _main
    Il y a vraiment des jours où on a de l'amour pour Linux

    @++

  20. #20
    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 : 40
    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
    Ce n'est pas "MICROLIB_API class Spectrum", mais "class MICROLIB_API Spectrum".

    Et si je peux me permettre, ton héritage publique de std::vector ne devrait pas être privé (d'après le contexte) ? Aussi, tu vas devoir exporter std::vector<Dot> si tu ne veux pas avoir de problème (me souviens plus de la syntaxe).

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Ma table temporaire ne semble pas fonctionner.
    Par outshined dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/09/2006, 15h40
  2. [SQL] La valeur d'une variable ne semble pas être prise en compte
    Par oroumgolok dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 04/09/2006, 00h31
  3. [MySQL] ORDER BY qui ne semble pas pris en compte
    Par yongblood dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/03/2006, 13h53
  4. librairie introuvable! Erreur"Pas d'objet dans ce contr
    Par vins111282 dans le forum Access
    Réponses: 5
    Dernier message: 16/05/2005, 15h07
  5. inclus ou pas inclus dans delphi 2005
    Par lopezpacheco dans le forum Débuter
    Réponses: 4
    Dernier message: 11/02/2005, 01h43

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