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.
A un moment, je dois initialisé mon string avec _bstr_t dsn.
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); };
Pour pouvoir changer la valeur de mon string, j'utilise un mutateur qui reçoit en paramètre un _bstr_t.
A la compilation ça passe très bien.
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; }
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.
Est-ce quelqu'un aurait une idée pour résoudre ce problème ???
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; }
Merci
Sachiel
P.S. : je développe sous visual c++ 2005 (et en c++)
Partager