c ++ - CEdit :: GetLine () windows 7

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har følgende kodestykke, hvor m\_edit er en CEdit-kontrol:


TCHAR lpsz[MAX\_PATH+1];

// get the edit box text
m\_edit.GetLine(0,lpsz, MAX\_PATH); 


Dette fungerer perfekt på computere, der kører Windows XP og tidligere. Jeg har ikke testet dette i Vista, men i Windows 7 får lpsz junk unicode tegn indsat i det (såvel som den faktiske tekst undertiden). Enhver ide om hvad der foregår her?

Bedste reference


Siden du bruger MFC, hvorfor bruger du ikke sin CString klasse? Det er en af ​​grundene til, at mange programmører blev trukket til MFC, fordi det gør det meget lettere at arbejde med strenge.


For eksempel kan du simpelthen skrive:


int len = m\_edit.LineLength(m\_edit.LineIndex(0));
CString path;
LPTSTR p = path.GetBuffer(len);
m\_edit.GetLine(0, p, len);
path.ReleaseBuffer();


(Ovenstående kode er testet for at fungere fint på Windows 7.)


Bemærk, at den kopierede linje ikke indeholder et null-terminerings tegn (se afsnittet 'Bemærkninger' i dokumentationen). Det kunne forklare de nonsenspersoner, du ser i nyere versioner af Windows. [6]

Andre referencer 1


Det er ikke nulstillet. Du skal gøre dette:


int count = m\_edit.GetLine(0, lpsz, MAX\_PATH);
lpsz[count] = 0;