Bonjour,

J'ai un problème tout bête mais que je n'arrive pas à résoudre

J'ai déclaré un string m_DSN en membre protected de ma classe CRecordListCtrl.

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
class CRecordListCtrl : public CListCtrl//CListCtrlEx
{
public:
	DECLARE_DYNCREATE(CRecordListCtrl);
	CRecordListCtrl();
	virtual ~CRecordListCtrl();
	...
 
protected:
 
	//{{AFX_MSG(CRecordListCtrl)$
		...
		string m_DSN;
		...
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
 
 
public:
	// assesseurs et mutateurs des attributs
	string get_m_DSN(){return m_DSN;};
	void set_m_DSN(_bstr_t dsn);
 
};
A un moment, je dois initialisé mon string avec _bstr_t dsn.
Pour pouvoir changer la valeur de mon string, j'utilise un mutateur qui reçoit en paramètre un _bstr_t.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
void CRecordListCtrl::set_m_DSN(_bstr_t dsn){
	string temp((char*)dsn);
	m_DSN = temp;
}
A la compilation ça passe très bien.
Le problème arrive en mode debug : à l'exécution de m_DSN = temp; j'ai droit à un access violation.

J'ai essayé en passant par une variable temporaire (en char*) mais cela ne marche pas non plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
void CRecordListCtrl::set_m_DSN(_bstr_t dsn){
	string temp((char*)dsn);
 
	int taille = temp.size() +1;
	char* tmp = new char[taille];
	strncpy(tmp, temp.c_str(), taille);
 
	m_DSN = tmp;
}
Est-ce quelqu'un aurait une idée pour résoudre ce problème ???


Merci


Sachiel


P.S. : je développe sous visual c++ 2005 (et en c++)