Tecnicamente non dovresti avere problemi, ma il come sempre questo metodo è piuttosto rischioso (ci si può facilmente dimenticare di deallocare la memoria); dato che stai lavorando in C++, perché non usi la classe string della STL? Ti eviteresti tutto questo genere di problemi:
file1.cpp
codice:
std::string testo; //variabile globale
file2.cpp
codice:
extern std::string testo;
...
...
WM_COMMAND:
testo=GetValue(hwnd,idctrl);
file3.cpp
codice:
extern std::string testo;
...
...
WM_INITDIALOG:
//operazioni con testo
...
...
//non c'è bisogno di liberare niente
file4.cpp
codice:
...
...
std::string GetValue(HWND hwnd, int IDCtrl) {
char* bufTxt=NULL;
std::string ret;
int lStr=GetWindowTextLength(GetDlgItem(hwnd,IDCtrl));
if (lStr>0) {
bufTxt = (char*)GlobalAlloc(GPTR,lStr+1);
GetDlgItemText(hwnd,IDCtrl,bufTxt,lStr+1);
ret=bufText;
GlobalFree(bufTxt);
}
return ret;
}
Un paio di appunti:
- usa Unicode (imposta il progetto per l'uso di Unicode e non usare char ma wchar_t, non string ma wstring);
- per il passaggio di dati al momento della creazione di un dialog non usare variabili globali, ma sfrutta piuttosto la funzione DialogBoxParam.