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 :

concept orienté objet avec plusieurs classes, methodes eronées sur l'instance propre


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut concept orienté objet avec plusieurs classes, methodes eronées sur l'instance propre
    Bonjour,

    Ici je pense que le probleme concerne la Relation/Visibilité des instances et methodes entre les differentes classes d'un projet MFC

    Il s'agit d'un projet VC++ auquel j'ai ajouté des fonctions d'un programme console c++ qui lui même utilise une librairie (classe device, device.h) autrement dit il s'agit d'un programme wrappeur (classe device_wrappeur, device_wrappeur.h) qui herite donc de la librairie
    Il s'agit donc d'implementer un programme wrappeur dans mon projet MFC (Classe MFCDEVICEDlg).

    la classe wrappeur a donc des méthodes sur une couche supérieure à la classe device
    et herite donc de la classe device.


    Fichiers:

    -Le programe wrappeur possède 2 fichiers: device_wrappeur.h et device_wrappeur.cpp

    -La librairie device possède plusieurs fichiers .h dont le principal est: device.h (avec des fonctions inline )

    -Le porjet MFC contient donc principalement les fichiers : MFCDEVICEDlg.cpp et MFCDEVICEDlg.h



    Le concept en soi est donc d'utiliser soit directement la classe device avec ce methodes
    mais alors le projet devient plus lourd à réaliser, donc j'ai décidé d'utiliser les appels du programme wrappeur et donc j'ai ajouter à mon projet MFC les 2 classes la mère "device" et la fille "device_wrappeur".

    Jusqu'ici vous suivez, donc niveau conception je suppose que la casse device_wrappeur sera un aggregat à ma classe MFCDEVICEDlg et en même temps heritera de la classe device


    Pour l'implementation de mon projet MFCDEVICE cj'ai ajouter les include de la classe device_wrappeur et decice (même si la classe device_wrappeur continet deja #include device.h) et je crée simplement une instance de device_wrappeur en globale dans le fichier MFCDEVICEDlg.cpp, (dois je mettre device_wrappeur en tant qu'attribut à ma classe MFCDEVICE?)

    Sachant que device_wrappeur utilise ses propres méthodes mais aussi celles de la classe mère device. J'appele donc indirectement dans mon projet MFC, via l'instance de la classe device_wrappeur les methodes de la classe device.

    Voici le resumé du code:


    code device_wrappeur.cpp
    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
     
     
    #include "stdafx.h" //a mettre dans tous les fichiers .cpp si MFC 
    #ifndef DEVICE_WRAPPEUR_INCL
    #include "device_wrappeur.h"
    #endif
    #ifndef DEVICE_INCL
    #include "device.h"
    #endif
     
    ...
     
     
    bool device_wrappeur::SetupCapture(gxu16 propname, gxu16 propvalue) {
    	gxu16 props[] = {
    		propname, propvalue,
    		FXCAM_CAPTURE_PROPERTY_END
    	};
     
    	bool st = device::SetCaptureProperties(props); //classe mere
    	return st;
    }
     
     
    ....



    code device_wrappeur.h

    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
     
     
    #ifndef DEVICE_WRAPPEUR_INCL
    #define DEVICE_WRAPPEUR_INCL
    //------------------------------------------------------------------------------
    #ifndef DEVICE_INCL
    #include "device.h"
    #endif
     
    #include "gxdevice.h"  
    #include <stdio.h>
     
     
     
    class device_wrappeur: public device {
    protected:
    	// ------- Error handling -------
    	char error_buffer[512];
    	char *logfile;
     
    ...
     
    //protected:
    public: // en public sinon pas d'acces possible
     
    #pragma pack(1)  
     
    	struct DEVICE_WRAPPEUR_SETTINGS {
    		gxu16	version;			/**< Version of the structure. */
    		gxu16	flags;				/**< Flags for preview program. */
    		gxu16	again;				/**< Analog gain. */
    		gxu16	dgain;				/**< Digital gain. */
    			} settings;
     
     
     
    public: 
     
    ...
     
     
    virtual bool SetupCapture(gxu16 propname, gxu16 propvalue); //
     
     
    ...

    code MFCDEVICEDlg.cpp:
    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
     
     
     
    #include "stdafx.h"
     
    #include "MFCDEVICE.h"
    #include "MFCDEVICEDlg.h"
    #include "afxwin.h"
     
    #include "device.h" //dois je retirer car  dans device_wrappeur.h j'ai aussi ?
     
    #ifndef DEVICE_WRAPPEUR_INCL
    #include "device_wrappeur.h" // classe dérivée de device
    #endif	
    ..
     
    //GLOBALES
     
    device_wrappeur cp; //instance en globale
     
     
    device_wrappeur::DEVICE_WRAPPEUR_SETTINGS settings;  //prototype que je mets sinon:  "error C2065: 'settings' : undeclared identifier" plus bas
     
      enum device_wrappeur::DEVICE_WRAPPEUR_FLAGS DEVICE_WRAPPEUR_FLAG_FILTER;   //je mets sinon erreur:  "error C2065: 'DEVICE_WRAPPEUR_FLAG_FILTER' : undeclared identifier" plus bas
     
    ...
     
     
    //FONCTIONS
    void MFCDEVICEDlg::OnCheck1() 
    {
    	// TODO: Add your control notification handler code here
     
     
             //FONCTION AGIT CORRECTEMENT, C'EST UNE METHODE DE DEVICE  
            // DONC DE LA CLASSE MERE
             if(!cp.IsValid()) { 
             device_geterror(&ecode, ebuf, sizeof(ebuf));
             fprintf(stderr, "Open module failed: %i %s\n", ecode, ebuf);
    		//return 1;
    	}
     
    ...
     
    }
     
    void MFCDEVICEDlg::OnSelchangeCombo2()
    {
     
    ...
     
    //FONCTION QUI N'A PAS D'EFFET PQ? 
    bool need_reconnect = !cp.SetupCapture(DEVICE_CAPTURE_PROPERTY_DGAIN, cp.settings.dgain); 
    //settings etant une struct defini dans device_wrappeur.h 
     
    //DEVICE_CAPTURE_PROPERTY_DGAIN etant un enum de device definit dans device.h
     
     
    }
     
    ...


    Sur les methodes device_wrappeur et device , ce qui me surprend c'est que les appels sur les methodes de device fonctionne bien mais celles sur les methodes (de couche supérieur) de device_wrappeur restent neutre, càd que la fonction (SetupCapture) ne fait rien alors que dans le programme en console (device_wrappeur.cpp) il agit correctement pq??

    Pourriez vous m'aider car je pense qu'il s'agit d'un probleme de conception ou d'instance nul sur un objet ?

    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Points : 149
    Points
    149
    Par défaut
    Bonjour,

    Pourrais-tu envoyer un extrait de la classe device ?
    Je suppose que SetCaptureProperties est une de ses méthodes ? Si celle-ci n'est pas une méthode static, l'appel dans SetCaptureProperties est faux.
    Il devrait être tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool st = this->SetCaptureProperties(props);
    Dans la mesure où device_wrappeur hérite de device, elle a accès à cette méthode de la classe device.

    Cordialement,
    A.
    Un ordinateur fait au bas mot 1 million d'opérations à la seconde, mais il n'a que ça à penser, aussi. (brèves de comptoirs, JM.Gourio)


  3. #3
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    Je me suis rendu compte d'une chose très interessante c'est que la fonction SetupCapture de device_wrappeur peut fonctionner normalement si je lui passe un autre paramètre que celle avec laquelle je l'ai utilisée jusqu'à present.

    Avec ces parametres d'appel ci la fonction agit bien :

    need_reconnect = !SetupCapture(DEVICE_CAPTURE_PROPERTY_BLACKLEVEL, settings.blacklevel); //OK !!!



    Je crois que c'est du à cause que la definition de la variable gxu16 properties[] qui se trouve dans les 2 fichiers device_wrappeur.cpp et MFCDEVICEDlg.cpp à la fois. Mais ils ne sont pas definis de la meme maniere (voir code) et c'est justement avec l'appel via un parametre qui ne se trouve pas dans la definition dans MFCDEVICEDlg.cpp que l'appel à SetupCapture focntionne bien , étrange ??


    J'ai recomplété mes codes avec des commentaires sur les endroits capitales //ICI



    code device_wrappeur.cpp
    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
     
     
    #include "stdafx.h" //a mettre dans tous les fichiers .cpp si MFC 
    #ifndef DEVICE_WRAPPEUR_INCL
    #include "device_wrappeur.h"
    #endif
    #ifndef DEVICE_INCL
    #include "device.h"
    #endif
     
    ...
     
     
    bool device_wrappeur::SetupCapture(gxu16 propname, gxu16 propvalue) {
    	gxu16 props[] = {
    		propname, propvalue,
    		DEVICE_CAPTURE_PROPERTY_END
    	};
     
    	bool st = device::SetCaptureProperties(props); //classe mere
    	return st;
    }
     
     
    ....
    bool device_wrappeur::Reconnect(bool force_init) {
    	if(!device::IsValid()) {
    		return false;
    	}
     
    	// Setup capture properties
    	gxu16 properties[] = {  //DEFINIT EGALEMENT DANS MFCDEVICEDlg.cpp
    		DEVICE_CAPTURE_PROPERTY_LED, settings.flags & DEVICE_WRAPPEUR_FLAG_LED_ON ? 1 : 0,
     
    		DEVICE_CAPTURE_PROPERTY_WIN_X1, 0,
    		DEVICE_CAPTURE_PROPERTY_WIN_Y1, 0,
    		DEVICE_CAPTURE_PROPERTY_WIN_XS, capture_width,
    		DEVICE_CAPTURE_PROPERTY_WIN_YS, capture_height,
     
    		DEVICE_CAPTURE_PROPERTY_AGAIN,  settings.again,
    		DEVICE_CAPTURE_PROPERTY_DGAIN,  settings.dgain,
    		DEVICE_CAPTURE_PROPERTY_SHUTTER_HI, settings.shutterus >> 16,
    		DEVICE_CAPTURE_PROPERTY_SHUTTER_LO, settings.shutterus & 0xFFFF,
    		DEVICE_CAPTURE_PROPERTY_TIMEDIFFBF_HI, settings.timediffbf >> 16,
    		DEVICE_CAPTURE_PROPERTY_TIMEDIFFBF_LO, settings.timediffbf & 0xFFFF,
    		DEVICE_CAPTURE_PROPERTY_ADC_MODE, settings.flags & DEVICE_WRAPPEUR_FLAG_12_10 ? 1 : 0,
     
    		DEVICE_CAPTURE_PROPERTY_DIFFBRIGHT, settings.diffbright,
    		DEVICE_CAPTURE_PROPERTY_BLACKLEVEL, settings.blacklevel, //ICI L'APPEL AVEC CE PARAMETRE EST OK
     
    		DEVICE_CAPTURE_PROPERTY_COLOR, settings.flags & DEVICE_WRAPPEUR_FLAG_COLOR ? 1 : 0,
    		DEVICE_CAPTURE_PROPERTY_SCALE_X, 1,
    		DEVICE_CAPTURE_PROPERTY_SCALE_Y, 1,
     
    		DEVICE_CAPTURE_PROPERTY_END
    	};
     
    	if(!device::SetCaptureProperties(properties)) {
    		return false;
    	}



    code device_wrappeur.h

    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
     
     
    #ifndef DEVICE_WRAPPEUR_INCL
    #define DEVICE_WRAPPEUR_INCL
    //------------------------------------------------------------------------------
    #ifndef DEVICE_INCL
    #include "device.h"
    #endif
     
    #include "gxdevice.h"  
    #include <stdio.h>
     
     
     
    class device_wrappeur: public device {
    protected:
    	// ------- Error handling -------
    	char error_buffer[512];
    	char *logfile;
     
    ...
     
    //protected:
    public: // en public sinon pas d'acces possible
     
    #pragma pack(1)  
     
    	struct DEVICE_WRAPPEUR_SETTINGS {
    		gxu16	version;			/**< Version of the structure. */
    		gxu16	flags;				/**< Flags for preview program. */
    		gxu16	again;				/**< Analog gain. */
    		gxu16	dgain;				/**< Digital gain. */
    			} settings;
     
     
     
    public: 
     
    ...
     
     
    virtual bool SetupCapture(gxu16 propname, gxu16 propvalue); //
     
     
    ...

    code MFCDEVICEDlg.cpp:
    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
     
     
     
    #include "stdafx.h"
     
    #include "MFCDEVICE.h"
    #include "MFCDEVICEDlg.h"
    #include "afxwin.h"
     
    #include "device.h" //dois je retirer car  dans device_wrappeur.h j'ai aussi ?
     
    #ifndef DEVICE_WRAPPEUR_INCL
    #include "device_wrappeur.h" // classe dérivée de device
    #endif	
    ..
     
    //GLOBALES
     
    device_wrappeur cp; //instance en globale
     
     
    device_wrappeur::DEVICE_WRAPPEUR_SETTINGS settings;  //prototype que je mets sinon:  "error C2065: 'settings' : undeclared identifier" plus bas
     
      enum device_wrappeur::DEVICE_WRAPPEUR_FLAGS DEVICE_WRAPPEUR_FLAG_FILTER;   //je mets sinon erreur:  "error C2065: 'DEVICE_WRAPPEUR_FLAG_FILTER' : undeclared identifier" plus bas
     
    ...
     
     
    //FONCTIONS
    void MFCDEVICEDlg::OnCheck1() 
    {
    	// TODO: Add your control notification handler code here
     
     
             //FONCTION AGIT CORRECTEMENT, C'EST UNE METHODE DE DEVICE  
            // DONC DE LA CLASSE MERE
             if(!cp.IsValid()) { 
             device_geterror(&ecode, ebuf, sizeof(ebuf));
             fprintf(stderr, "Open module failed: %i %s\n", ecode, ebuf);
    		//return 1;
    	}
     
    ...
     
    }
     
    void MFCDEVICEDlg::OnSelchangeCombo2()
    {
     
    ...
     
    //FONCTION QUI N'A PAS D'EFFET PQ? 
    bool need_reconnect = !cp.SetupCapture(DEVICE_CAPTURE_PROPERTY_DGAIN, cp.settings.dgain); 
    //settings etant une struct defini dans device_wrappeur.h 
     
    //DEVICE_CAPTURE_PROPERTY_DGAIN etant un enum de device definit dans device.h
     
     
    }
     
    ...
     
    bool MFCDEVICEDlg::GetCapture()  //les appels dans cette fonction marche bien 
                                     // car on appelle directement les methodes 
    								 // de device
    {
     
    	// Query information
    	gxu16 came;
    	if(!cp.GetInfo(NULL, NULL, NULL, &cam)) {   // fonctionne bien GetInfo est une methode de device
    		gx_geterror(&ecode, ebuf, sizeof(ebuf));
    		MessageBox("GetInfo() failed..","Capture message");
    		return 1;
    	}
     
     
    	// Setup capture properties
    	gxu16 properties[] = {  //ICI: PARAMETRES EN CAUSE !!!!!
    		DEVICE_CAPTURE_PROPERTY_WIN_X1, 0,
    		DEVICE_CAPTURE_PROPERTY_WIN_Y1, 0,
    		DEVICE_CAPTURE_PROPERTY_WIN_XS, img_width,
    		DEVICE_CAPTURE_PROPERTY_WIN_YS, img_height,
     
    		DEVICE_CAPTURE_PROPERTY_AGAIN,  100,
    		DEVICE_CAPTURE_PROPERTY_DGAIN,  100,
    		DEVICE_CAPTURE_PROPERTY_SHUTTER_HI, 0,
    		DEVICE_CAPTURE_PROPERTY_SHUTTER_LO, 10000,
    		DEVICE_CAPTURE_PROPERTY_TIMEDIFFBF_HI, device_fps_to_timediffbf(60) >> 16,
    		DEVICE_CAPTURE_PROPERTY_TIMEDIFFBF_LO, device_fps_to_timediffbf(60) & 0xFFFF,
    		DEVICE_CAPTURE_PROPERTY_ADC_MODE, 0,
     
    		DEVICE_CAPTURE_PROPERTY_COLOR, 0,
    		DEVICE_CAPTURE_PROPERTY_SCALE_X, 1,
    		DEVICE_CAPTURE_PROPERTY_SCALE_Y, 1,
     
    		DEVICE_CAPTURE_PROPERTY_END
    	};
     
    	if(!cp.SetCaptureProperties(properties)) { //fonctionne pas si j'enleve la definition
    	                                           //gxu16 properties[] juste avant
    		gx_geterror(&ecode, ebuf, sizeof(ebuf));
    		MessageBox("SetCaptureProperties() failed.","Capture message");
    		return 1;
    	}
    	...
     
    }

    Donc Apperement seule la definition dans device_wrappeur est suffisante, donc j'ai decidé d'enlever la definition de gxu16 properties[] dans la fonction bool MFCDEVICEDlg::GetCapture() du fichier MFCDEVICEDlg.cpp mais alors la ligne plus bas, dans la fonction bool CFXCMAd_previewDlg::GetCaptureImage() genere une erreur " error C2065: 'properties' : undeclared identifier" :

    if(!cp.SetCaptureProperties(properties)) //erreur :" properties is undeclared "


    Et voici la definirion de SetCaptureProperties, elle se trouve dans le fichier device.h :

    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
     
     
     
    ...
     
     
    inline bool SetCaptureProperties(const gxu16 *properties) throw(gxError) {
     
    bool st = device_setcaptureproperties(*this, properties) ? true : false;
    gxcondthrow(!st);
    return st;
     
    }
     
    ...
    D'ou vient le probleme ?

    Comment pourrais je definir une fois et au bon endroit la variable gxu16 properties [] ?

    Merci Agamitsudo

  4. #4
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    C'est normal que tu aies une erreur, si la variable n'existe pas.

    Si tu veux que la variable fasse partie de ta classe et soit utilisable à n'importe quel moment, il faut la déclarer dans la classe.

  5. #5
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Ok,

    1)

    C'est exact mais il est defini dans une methode de la classe device_wrappeur

    device_wrappeur.cpp :
    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
    ...
    
    bool device_wrappeur::Reconnect(bool force_init) 
    {
    	// Check module
    	if(!device::IsValid()) {
    		SetGXError("Create camera class failed (possible the  
        fxcam module doesn't exists)");
    		return false;
    	}
    
    ...
    
    	// Setup capture properties
    	gxu16 properties[] = {
    		DEVICE_CAPTURE_PROPERTY_LED, settings.flags & DEVICE_WRAPPEUR_FLAG_LED_ON ? 1 : 0,
    		
    		DEVICE_CAPTURE_PROPERTY_WIN_X1, 0,
    		DEVICE_CAPTURE_PROPERTY_WIN_Y1, 0,
    		DEVICE_CAPTURE_PROPERTY_WIN_XS, capture_width,
    		DEVICE_CAPTURE_PROPERTY_WIN_YS, capture_height,
    		
    		DEVICE_CAPTURE_PROPERTY_AGAIN,  settings.again,
    		DEVICE_CAPTURE_PROPERTY_DGAIN,  settings.dgain,
    		DEVICE_CAPTURE_PROPERTY_SHUTTER_HI, settings.shutterus >> 16,
    		DEVICE_CAPTURE_PROPERTY_SHUTTER_LO, settings.shutterus & 0xFFFF,
    		DEVICE_CAPTURE_PROPERTY_TIMEDIFFBF_HI, settings.timediffbf >> 16,
    		DEVICE_CAPTURE_PROPERTY_TIMEDIFFBF_LO, settings.timediffbf & 0xFFFF,
    		DEVICE_CAPTURE_PROPERTY_ADC_MODE, settings.flags & DEVICE_WRAPPEUR_FLAG_12_10 ? 1 : 0,
    
    		DEVICE_CAPTURE_PROPERTY_DIFFBRIGHT, settings.diffbright,
    		DEVICE_CAPTURE_PROPERTY_BLACKLEVEL, settings.blacklevel,
    		
    		DEVICE_CAPTURE_PROPERTY_COLOR, settings.flags & DEVICE_WRAPPEUR_FLAG_COLOR ? 1 : 0,
    		DEVICE_CAPTURE_PROPERTY_SCALE_X, 1,
    		DEVICE_CAPTURE_PROPERTY_SCALE_Y, 1,
    		
    		DEVICE_CAPTURE_PROPERTY_END
    	};
    	
    ...
    
    }

    Et donc j'ai mis en en haut du fichier MFCDEVICEDlg.cpp
    la declaration : "extern gxu16 properties[];"

    Ce qui a compilé correctement mais a un erreur de link :

    error LNK2001: unresolved external symbol "unsigned short * properties" (?properties@@3PAGA)

    Comme la classe device_wrappeur est un aggregation de la classe MFCDEVICEDlg , dans quel classe et fichiers dois je definir et declarer cette variable pour pouvoir l'utiliser de partout ?



    2)

    Mais ce qui m'etonne toujours c'est pourquoi quand j'appelle la fonction avec ds parametres differents fonctionne bien ou pas selon le parametre?

    need_reconnect = !cp.SetupCapture(DEVICE_CAPTURE_PROPERTY_BLACKLEVEL, settings.blacklevel); //OK !!!


    need_reconnect = !cp.SetupCapture(DEVICE_CAPTURE_PROPERTY_DGAIN, settings.dgain); //NOK !!!

    avec le parametre blacklevel ca fonctionne et pas avec dgain, pourquoi ?


    Merci

Discussions similaires

  1. conception Objet avec plusieurs table MYSQL
    Par Polymorph dans le forum Langage
    Réponses: 7
    Dernier message: 06/02/2009, 09h28
  2. [archi-débutant]application du concept orienté objet
    Par tookaina dans le forum VB.NET
    Réponses: 2
    Dernier message: 15/01/2007, 13h18
  3. Conception oriente objet
    Par black.out dans le forum OpenGL
    Réponses: 4
    Dernier message: 30/12/2006, 00h15
  4. conception orientée objet
    Par yvon_huynh dans le forum Langage
    Réponses: 1
    Dernier message: 07/08/2006, 13h09
  5. [Conception] Listes chainées avec plusieurs champs
    Par Nasky dans le forum Général Java
    Réponses: 6
    Dernier message: 11/03/2006, 23h52

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