Accéder à une variable dans une focntion static de ma classe

Signaler
Messages postés
34
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
28 juillet 2005
-
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
-
Bonjour à tous,

je programme avec VC++ et j'ai une fonction définie comme suit:

static BOOL CALLBACK DriverEnumProc(HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport);

J'ai une variable " CComboBox m_comboBox " associée à un ComboBox.

Je veux accéder à cette variable dans ma fonction DriverEnumProc.

Quand je mets " m_comboBox.AddString("toto") " dans le focntion
DriverEnumProc ceci me donne l'erreur de compilation suivante: " error
C2228: left of '.AddString' must have class/struct/union type "

Je crois comprendre que je ne peux pas accéder à ma variable m_comboBox dans une fonction static.

Est ce que quelqu'un aurait une solution pour résoudre ce problème?

Merci,

Hanane

9 réponses

Messages postés
15192
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
7 décembre 2021
101
Si ta CallBack ne fait pas partie de la classe qui contient la combo, tu es obligé de la spécifier:

Classe::m_comboBox

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
Messages postés
34
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
28 juillet 2005

resalut,

Si ma fonction callback fait partie de ma classe, et j'ai pensé malgré
ça à ajouter Classe::m_comboBox mais ca ne marche pas aussi, même
erreur.

Merci,

Hanane
Messages postés
15192
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
7 décembre 2021
101
Fait donc voir ton bout de code s'il te plait

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
Messages postés
34
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
28 juillet 2005

Re,

En fait c'est un bout de code que j'ai trouvé sur msdn pour lister les
codecs installés sur la machine et que j'ai adapté à mon problème:

dans le fichier .h:

static BOOL CALLBACK DriverEnumProc(HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport);



// Dialog Data

//{{AFX_DATA(CCodecConf)

enum { IDD = IDD_CODECCONFDLG };

CComboBox m_comboBox;

//}}AFX_DATA



et dans le .cpp:



BOOL CALLBACK CCodecConf::DriverEnumProc(HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport)

{

// Get some details.

ACMDRIVERDETAILS dd;

dd.cbStruct = sizeof(dd);

MMRESULT mmr = acmDriverDetails(hadid, &dd, 0);

if (mmr)

{

printf(" ");

} else

{

/// Le problème est là

m_comboBox.AddString(dd.szLongName);

}



// Open the driver.

HACMDRIVER had = NULL;

mmr = acmDriverOpen(&had, hadid, 0);

if (mmr) {

printf(" ");

} else

{

DWORD dwSize = 0;

mmr = acmMetrics((HACMOBJ)
had,
ACM_METRIC_MAX_SIZE_FORMAT, &dwSize);


acmDriverClose(had, 0);

}



return TRUE; // Continue enumeration.

}



BOOL CCodecConf::OnInitDialog()

{

CDialog::OnInitDialog();

DWORD dwACMVer = acmGetVersion();

DWORD dwCodecs = 0;

MMRESULT mmr = acmMetrics(NULL, ACM_METRIC_COUNT_CODECS, &dwCodecs);



// Enumerate the set of enabled drivers.

mmr = acmDriverEnum(DriverEnumProc, 0, 0);



return TRUE;

}



Hanane
Messages postés
15192
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
7 décembre 2021
101
Est-ce que tu as inclu afxwin.h? Il contient la définition de la ComboBox
Messages postés
34
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
28 juillet 2005

Non ca ne marche pas même si j'inclus le afxwin.h ce qui n'est pas nécessaire (je crois) puisque je travailles avec les mfc.

Hanane
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
1
Esseye avec un extern devant ta variable :



extern CComboBox m_comboBox;
Messages postés
34
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
28 juillet 2005

Non ca ne marche pas, mais je crois que je vais faire autrement.
Comme le but est de remplire la combobox avec la liste des codecs. J'ecris cette derniere dans un fichier et après je lis le fichier ligne par ligne pour remplir la comboBox.
C'est un peu chercher midi à 14h mais bon ca marche en attendant de trouver une solution.
Merci,
Hanane
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
1
Poste ton code complet si il est pas long sinon tu l'upload quelque part.



Sinon tu peux utiliser SendMessage() avec le HWND du combobox pour ajouter une ligne:



SendMessage(ComboBoxWnd, CB_INSERTSTRING, -1, (LPARAM)"une ligne");



Mais c'est pas du MFC..