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