sto facendo questa prova, che ne pensate:
è giusto assegnare ad variabile globale un char* di ritorno da una funzione (ossia ritorna un char* allocato con GlobalAlloc ed inizializzato leggendo la edit) e deallocarla al termine con GlobalFree???
sintetisso esemplificando:
premesso che i file1,file2,file3 sono in ordine di esecuzione/chiamata e che la lettura dei valori negli edit può avvenire
in ripetizione
file1.cpp
codice:
char *testo; //variabile globale
...
...
file2.cpp
codice:
extern char *testo;
...
...
WM_COMMAND:
testo=GetValue(hwnd,idctrl);
file3.cpp
codice:
extern char *testo;
...
...
WM_INITDIALOG:
//operazioni con testo
...
...
GlobalFree(testo);
file4.cpp // contiene la funzione richiamabile + volte
codice:
...
...
char *GetValue(HWND hwnd, int IDCtrl) {
char* bufTxt=NULL;
int lStr=GetWindowTextLength(GetDlgItem(hwnd,IDCtrl));
if (lStr>0) {
bufTxt = (char*)GlobalAlloc(GPTR,lStr+1);
GetDlgItemText(hwnd,IDCtrl,bufTxt,lStr+1);
}
return bufTxt;
}
...
...
dubbi:
1) la funzione ritorna un char*, un punatore ad una stringa definto locale ma allocato nella heap quindi sopravvive
2) deallocare memoria in questo modo è corretto
da debug sembra tutto funzionare