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 :

déclaration de fonctions externes


Sujet :

C++

  1. #21
    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
    Analyse.cpp n'inclue pas Analyse.h.

    Et Analyse.h n'inclue pas l'en-tête qui définit la classe CImgl.

  2. #22
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par touco
    Pourquoi as-tu encadré le code C++ (de analyse.cpp) par un #ifdef/#endif ? Si c'est nécessaire as-tu défini ANALYSE_H dans les options de compilation de analyse.cpp (-DANALYSE_H dans les options) ? Si ce n'est pas le cas le compilateur compile un fichier vide et la définition de fonction est effectivement manquante.
    tu as parfaitement raison...

  3. #23
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par touco
    Le problème pourrait-il être lié à l'utilisation du template dans la déclaration de la fonction ?
    Désolé, j'ai du quitter le boulot un peu précipitamment hier après midi.
    J'ai continuer d'analyser mon problème, et je tombe sur quelque chose de bizarre (merci Miles et Touco ).

    Mon problème est le suivant : lorsque je déclare la fonction importDonnees comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CImg <unsigned char> importDonnees (
    int numchoc, int camera, long image_deb, long image_fin)
    
    le compilateur m'indique ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
    Compilation...
    analyse.cpp
    analyse.cpp(15) : error C2143: erreur de syntaxe : absence de ';' avant '<'
    analyse.cpp(15) : error C2501: 'CImgl' : Spécificateurs de type ou de classe de stockage manquants
    analyse.cpp(15) : error C2143: erreur de syntaxe : absence de ';' avant '{'
    analyse.cpp(15) : error C2447: '{' : en-tête de fonction manquant (liste formelle à l'ancien format ?)
    
    Quand je remplace (pour test) cette fonction par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    int importDonnees (int numchoc, int camera, long image_deb, long image_fin) {
    return 0;
    }
    
    ça compile sans aucuns problèmes...

    Mon problème viendrait donc du template??? Pourtant, il n'y a rien de sorcier là dedans, je n'utilise pas de typename....

    Merci énormément pour votre aide!

  4. #24
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ca vient du fait qu'il ne sache pas ce qu'est CImg, ce qu'on disait un peu plus haut, il manque un header à inclure quelque part.

  5. #25
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par Miles
    Ca vient du fait qu'il ne sache pas ce qu'est CImg, ce qu'on disait un peu plus haut, il manque un header à inclure quelque part.
    Je comprend bien ce que tu veux dire Miles, le problème c'est que l'include y est... il sert pour toutes les autres fonctions!

    Pour mémoire, voici mon main :
    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
    
    /*Main*/
     
    #include <list>
    #include <algorithm>
    #include <iostream>
    // Les 3 fonctions exportées de la DLL tsrir_c.dll
    extern "C" int IRnb_images( int num_choc, int camera, int *nbimages );
    extern "C" int IRimages( int num_choc, int camera, long image_deb,
    long image_fin, unsignedshort ** Images);
    extern "C" int IRimages_pas( int num_choc, int camera, long image_deb,
    long image_fin, long pas, unsignedshort ** Images );
     
    #include "CImg.h"  //pour la définition de CImg et CImgl
    usingnamespace cimg_library; //namespace correspondant
    #include "calc_camir.h"
    
     
    #include "quadrillage.h"
    #include "warping.h"
    #include "masque.h"
    #include "outils.h"
    #include "choixzone.h"
    #include "analyse.h" // .h du fichier qui nous intéresse
    
    Le truc, c'est que lorsque j'ôte #include "analyse.h" et que j'insère le code à la place
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    CImgl <unsignedshort> importDonnees (int numchoc, int camera, long image_deb, long image_fin) {
    CImg <unsignedshort> liste;
    return liste;
    }
    
    ca COMPILE !!!!

    Y'a un truc qui m'échappe

  6. #26
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    C'est donc que ton analyse.h fait du n'importe quoi Déjà, le using namespace est à mettre après tous les #include.

    Bon, le pb est que tu n'inclus sans doute pas les headers dans analyse.cpp. En fait, tu devrais inclure les headers indispensables dans analyse.h. Là, tu nous dis comment résoudre lee pb en trafiquant dans main.cpp alors que le pb est dans analyse.cpp.

  7. #27
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par Miles
    C'est donc que ton analyse.h fait du n'importe quoi Déjà, le using namespace est à mettre après tous les #include.
    Je ne pense pas puisque mes autres include sont du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    #ifndef OUTILS_H
    #define OUTILS_H
    #include "outils.cpp"
    #endif
    
    car le fichier outils.cpp contient plein de template (et de non template aussi), et je me sers du namespace cimg_library...

    Celà dit, je suis d'accord avec toi, je dois faire n'importe quoi... Mais je ne suis pas un pro en programmation, et l'utilisation des ces template ont un peu perturbé ma vision des schémas de fonction classiques.
    Je me bas contre un problème, et c'est vrai que je ne comprend pas trop ce qui se passe...

    Mais, franchement, je trouve qu'il y a qqch de bizarre.

    Je vais continuer à chercher sur la piste que tu m'as donné.
    Merci encore pour ton aide.

  8. #28
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Euh... Il n'y aurait pas confusion entre les .h et les .cpp là ?

    En général le fichier toto.cpp contient une ligne #include "toto.h", or tu fais exactement l'inverse. Ca me semble dangereux et peu recommandé.

  9. #29
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Bon, arrête tout de suite d'appeler tes fichiers contenant l'instanciation des templates .cpp. De préférence mets l'impélemntation dans la déclaration directement, ça simplifiera les choses. Là, comment le compilateur peut-il savoir qu'il ne doit pas compiler ton .cpp ? Tu as regardé la FAQ à ce sujet ?

  10. #30
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par touco
    Euh... Il n'y aurait pas confusion entre les .h et les .cpp là ?

    En général le fichier toto.cpp contient une ligne #include "toto.h", or tu fais exactement l'inverse. Ca me semble dangereux et peu recommandé.
    J'ai fait exactement comme je l'ai vu dans la FAQ :
    http://c.developpez.com/faq/cpp/?pag...VERS_templates

    OK Miles, je vais tester. En fait, je déclare tout directement dans le .h c'est ça? Evidemment, je n'aurai plus de problèmes là dessus!

  11. #31
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Bizarre, je croyais que la FAQ n'avait pas ça écrit comme ça.
    Désolé
    en tout cas, je suis partisan de l'écriture de l'implémentation dans le .h, aucune confusion dans ces cas

  12. #32
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par Miles
    Bizarre, je croyais que la FAQ n'avait pas ça écrit comme ça.
    Désolé
    en tout cas, je suis partisan de l'écriture de l'implémentation dans le .h, aucune confusion dans ces cas
    Je vais cependant suivre ton conseil...C'est vrai qu'il n'y a pas de confusions possibles!
    Je réécris tout et je vous tiens au courant!

    Merci pour votre soutien (déjà deux jours de galère )!

  13. #33
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    OK la compilation aboutie, je pense effectivement que la fonction faisait quand même partie d'une classe template, et nécessitait donc une déclaration dans un .h, comme l'a fait remarqué Miles.
    Un grand merci !

    Par contre, il se passe (encore ??? ) un truc un peu étrange:
    J'ai 2 fichiers calc_camir.c et calc_camir.h dans ce même projet C++, faisant appel à une librairie C.

    Si je la déclare comme suit:
    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
    
    ifndef _CALCCAMIR_H // Pour éviter des warnings de redéfinitions lors de la compilation.
    #define _CALCCAMIR_H
    //-------------------------------------------------------------------------------------
    // Chemin des LUT
    #define DVCAMIR_NFS_LUT_DIR "F:\\lut\\"
    //-------------------------------------------------------------------------------------
    // PTSSURLUT doit être >=7 car sinon 3*2^14>MAXPTSLUT avec MAXPTSLUT=500;
    #define PTSSURLUT 8 // On prend 1 point sur 2^PTSSURLUT pour définir la LUT
    #define MAXPTSLUT 500 // Nb MAX de points max sur chaque LUT
    #define MAXSIZELINE 100 // Nb MAX de caracteres d'une ligne
    #define MAXDATAINFILE 2000 // Nb MAX de caracteres dans le fichier LUT
    #define MAXDATALUT 200 // Nb MAX de données de la LUT brute
    //-------------------------------------------------------------------------------------
    #ifndef GEMINY
    #define GEMINY 01
    #endif
    #ifndef INDIGO
    #define INDIGO 02
    #endif
    #define NUM_LUMV12_MAX 12
    #define NB_FENETRES 16
    // Stocke un fichier LUT en mémoire.
    char FileLUTStockMem[MAXDATAINFILE];
    typedefstruct
    {
    float Temp_Fut; // Température du fut optique
    float Temp_Prisme; // Température du prisme
    float Temp_Saphir; // Température de la fenetre saphir
    float Trans_Fut[2]; // Transmission du fut optique
    float Trans_Prisme[2]; // Transmission du prisme
    float Trans_Saphir[2]; // Transmission de la fenetre saphir
    short Type; // Type de caméra (Geminy (1) ou Indigo (2))
    short PtsLUT; // Nb de points dans LUT1 et LUT2
    float LUT1[MAXPTSLUT]; // LUT pour la zone 1
    float LUT2[MAXPTSLUT]; // LUT pour la zone 2
    int PosArrete; // Position de l'arrete qui sépare les 2 zones du LPT
    char LUT1FilePath[256]; // Chemin vers le fichier de la LUT1.
    char LUT2FilePath[256]; // Chemin vers le fichier de la LUT2.
    char LUT3FilePath[256]; // Chemin vers le fichier de la LUT3.
    } struct_endoscope;
    struct_endoscope Endoscope[NUM_LUMV12_MAX];
    float Temperature_Lue[NB_FENETRES] [NUM_LUMV12_MAX+1];
    float Temperature_Zone0[NB_FENETRES] [NUM_LUMV12_MAX+1];
    float Temperature_Zone1[NB_FENETRES] [NUM_LUMV12_MAX+1];
    long DL_Lu[NB_FENETRES] [NUM_LUMV12_MAX+1];
    long DL_Zone0[NB_FENETRES] [NUM_LUMV12_MAX+1];
    long DL_Zone1[NB_FENETRES] [NUM_LUMV12_MAX+1];
    // Données calculée en Temps Réel.
    // float TempRTC2, TempRTC3;
    float PLHRT, PCIRT;
     
     
    // Definition du pointer NULL
    #ifndef NULL
    #undef NULL
    #define NULL 0
    #endif
    // Prototype des fonctions
    // ---------> Interpolation linéaire des données
    extern "C" short Interpol (long *xTab, long *yTab, int lTab, float xVal, float *yVal);
    // ---------> Reset de la structure Endoscope (tout à 0)
    extern "C" void Reset_Endoscope (struct_endoscope *Endoscope);
    // ---------> Lecture d'une variable de type float dans Top
    extern "C" LitTopFloat(long nchoc, char *NmProd, char *NmObj, char *NmPar, float *Val);
    // ---------> Lecture d'une variable de type String dans Top
    extern "C" LitTopString(long nchoc, char *NmProd, char *NmObj, char *NmPar, char *Str);
    // ---------> Lecture d'un fichier LUT .txt (calibration)
    extern "C" ReadFicLUT (char *NmFicLUT, long *xLUTi, long *yLUTi, short *lLUTi);
    // ---------> Construction de la LUT finale pour passer des DL en T°
    extern "C" ConstructLUT (long *xLUTi, long *yLUTi, short lLUTi,
    short NumLUT, short Zone, struct_endoscope *Endoscope,
    float *xLUT , float *yLUT , short *lLUT );
    // ---------> Lecture des fichiers de calibration LUT1 ou 2 ou 3
    extern "C" InitLUT (long nchoc, short nEndo, short nLUT, long *xLUTi, long *yLUTi, short *lLUTi);
    // ---------> Recopie de la LUT calibrée dans les varaibles de la structure Endoscope
    extern "C" void RecopieLUT(struct_endoscope *Endoscope , short Zone , float *DL , float *TP ,
    short lDL);
    // ---------> Lecture des données Top et initialisation de la structure Endoscope
    extern "C" short Init_Endoscope (long nchoc, short nEndo, struct_endoscope *Endoscope);
    // ---------> Calcul de la T° à partir des DL mesurés
    extern "C" short DL2Temp (struct_endoscope *Endoscope, short zone, long DL, float *Temp);
    // ---------> Calcul du DL à partir d'une température
    extern "C" short Temp2DL (struct_endoscope *Endoscope, short zone, float Temp, long *DL);
     
    #endif
    
    le compilo n'est pas content :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    calc_camir.c
    c:\Documents and Settings\GD280706\Bureau\analyse IR\IR\calc_camir.h(85) : error C2059: erreur de syntaxe : 'chaîne'
    c:\Documents and Settings\GD280706\Bureau\analyse IR\IR\calc_camir.h(88) : error C2059: erreur de syntaxe : 'chaîne'
    c:\Documents and Settings\GD280706\Bureau\analyse IR\IR\calc_camir.h(91) : error C2059: erreur de syntaxe : 'chaîne'
    c:\Documents and Settings\GD280706\Bureau\analyse IR\IR\calc_camir.h(94) : error C2059: erreur de syntaxe : 'chaîne'
    c:\Documents and Settings\GD280706\Bureau\analyse IR\IR\calc_camir.h(97) : error C2059: erreur de syntaxe : 'chaîne'
    c:\Documents and Settings\GD280706\Bureau\analyse IR\IR\calc_camir.h(100) : error C2059: erreur de syntaxe : 'chaîne'
    c:\Documents and Settings\GD280706\Bureau\analyse IR\IR\calc_camir.h(105) : error C2059: erreur de syntaxe : 'chaîne'
    c:\Documents and Settings\GD280706\Bureau\analyse IR\IR\calc_camir.h(108) : error C2059: erreur de syntaxe : 'chaîne'
    c:\Documents and Settings\GD280706\Bureau\analyse IR\IR\calc_camir.h(112) : error C2059: erreur de syntaxe : 'chaîne'
    c:\Documents and Settings\GD280706\Bureau\analyse IR\IR\calc_camir.h(115) : error C2059: erreur de syntaxe : 'chaîne'
    c:\Documents and Settings\GD280706\Bureau\analyse IR\IR\calc_camir.h(118) : error C2059: erreur de syntaxe : 'chaîne'
    

    Alors que, quand je copie toutes les déclarations extern "C" dans l'en tête du main, tout se passe bien???

    MERCI ENCORE !! (je ne le dirai jamais assez!)

  14. #34
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    extern "C" ne doit être indiqué que lorsqu'on compile du C++, donc entouré de #ifdef _cplusplus #endif
    De plus ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifndef NULL
    #undef NULL
    #define NULL 0
    #endif
    C'est sans doute pas ce que tu veux.

  15. #35
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par Miles
    extern "C" ne doit être indiqué que lorsqu'on compile du C++, donc entouré de #ifdef _cplusplus #endif
    Eh oui, bien sur !
    Je fais donc ça? :
    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
    #ifdef _cplusplus
    // ---------> Interpolation linéaire des données
    extern "C" short Interpol (long *xTab, long *yTab, int lTab, float xVal, float *yVal);
    // ---------> Reset de la structure Endoscope (tout à 0)
    extern "C" void Reset_Endoscope (struct_endoscope *Endoscope);
    // ---------> Lecture d'une variable de type float dans Top
    extern "C" LitTopFloat(long nchoc, char *NmProd, char *NmObj, char *NmPar, float *Val);
    // ---------> Lecture d'une variable de type String dans Top
    extern "C" LitTopString(long nchoc, char *NmProd, char *NmObj, char *NmPar, char *Str);
    // ---------> Lecture d'un fichier LUT .txt (calibration)
    extern "C" ReadFicLUT (char *NmFicLUT, long *xLUTi, long *yLUTi, short *lLUTi);
    // ---------> Construction de la LUT finale pour passer des DL en T°
    extern "C" ConstructLUT (long *xLUTi, long *yLUTi, short lLUTi,
    short NumLUT, short Zone, struct_endoscope *Endoscope,
    float *xLUT , float *yLUT , short *lLUT );
    // ---------> Lecture des fichiers de calibration LUT1 ou 2 ou 3
    extern "C" InitLUT (long nchoc, short nEndo, short nLUT, long *xLUTi, long *yLUTi, short *lLUTi);
    // ---------> Recopie de la LUT calibrée dans les varaibles de la structure Endoscope
    extern "C" void RecopieLUT(struct_endoscope *Endoscope , short Zone , float *DL , float *TP ,
    short lDL);
    // ---------> Lecture des données Top et initialisation de la structure Endoscope
    extern "C" short Init_Endoscope (long nchoc, short nEndo, struct_endoscope *Endoscope);
    // ---------> Calcul de la T° à partir des DL mesurés
    extern "C" short DL2Temp (struct_endoscope *Endoscope, short zone, long DL, float *Temp);
    // ---------> Calcul du DL à partir d'une température
    extern "C" short Temp2DL (struct_endoscope *Endoscope, short zone, float Temp, long *DL);
    
    #else
    
    // ---------> Interpolation linéaire des données
    short Interpol (long *xTab, long *yTab, int lTab, float xVal, float *yVal);
    // ---------> Reset de la structure Endoscope (tout à 0)
    void Reset_Endoscope (struct_endoscope *Endoscope);
    // ---------> Lecture d'une variable de type float dans Top
    short LitTopFloat(long nchoc, char *NmProd, char *NmObj, char *NmPar, float *Val);
    // ---------> Lecture d'une variable de type String dans Top
    short LitTopString(long nchoc, char *NmProd, char *NmObj, char *NmPar, char *Str);
    // ---------> Lecture d'un fichier LUT .txt (calibration)
    short ReadFicLUT (char *NmFicLUT, long *xLUTi, long *yLUTi, short *lLUTi);
    // ---------> Construction de la LUT finale pour passer des DL en T°
    short ConstructLUT (long *xLUTi, long *yLUTi, short lLUTi,
    short NumLUT, short Zone, struct_endoscope *Endoscope,
    float *xLUT , float *yLUT , short *lLUT );
    // ---------> Lecture des fichiers de calibration LUT1 ou 2 ou 3
    short InitLUT (long nchoc, short nEndo, short nLUT, long *xLUTi, long *yLUTi, short *lLUTi);
    // ---------> Recopie de la LUT calibrée dans les varaibles de la structure Endoscope
    void RecopieLUT(struct_endoscope *Endoscope , short Zone , float *DL , float *TP ,
    short lDL);
    // ---------> Lecture des données Top et initialisation de la structure Endoscope
    short Init_Endoscope (long nchoc, short nEndo, struct_endoscope *Endoscope);
    // ---------> Calcul de la T° à partir des DL mesurés
    short DL2Temp (struct_endoscope *Endoscope, short zone, long DL, float *Temp);
    // ---------> Calcul du DL à partir d'une température
    short Temp2DL (struct_endoscope *Endoscope, short zone, float Temp, long *DL);
    
    #endif
    
    A la compilation, c'est OK, par contre erreur à l'édition des liens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    calc_camir.obj : fatal error LNK1235: table de symboles COFF endommagée ou non valide
    
    Miles : tu sais d'où ça peut venir? Sinon, je déclare tous mes extern dans le main (c'est moins propre, mais ça marche)

  16. #36
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Normalement, on fait même un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #ifdef _cpluplus
    extern "C"
    {
    #endif
    /// les fonctions
    #ifdef _cplusplus
    }
    #endif
    En revanche, l'erreur est bizarre

  17. #37
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Bon, je ne comprends pas non plus cette erreur...
    A la limite, le fait de recoder ma fonction en C++ doit pouvoir unifier mon projet au niveau langage. Ca devra être mieux non?
    Je mets ça sur ma TO-DO list, et en attendant je fais les déclarations en extern "C" directement dans le main (pas très propre !)

  18. #38
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Tout a été compilé avec la même version du compilateur ?

  19. #39
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par Miles
    Tout a été compilé avec la même version du compilateur ?
    Heu... pas tout à fait.
    Les DLL ont été compilé sous VC6.0. Par contre, en ce qui concerne mon projet, tout a été compilé sous VC++.net.

    Mais je te vois venir, il faudrait que je recompile ma lib avec VC++.net?

  20. #40
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Peut-être.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/04/2006, 16h08
  2. [PHP][Javascript] PB avec appel de fonctions externes, HELP!
    Par chaser_T dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/04/2006, 16h44
  3. Réponses: 6
    Dernier message: 20/11/2005, 02h53
  4. [JS] Problème déclaration de fonction
    Par glloq8 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/09/2005, 10h22
  5. Réponses: 13
    Dernier message: 20/06/2005, 14h13

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