|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2006
Messaggi: 311
|
[c++] creare gui con win32 api...stack corrupted error..sono principiante..aiutatemi
salve a tutti... sto provando per la prima volta un programma con interfaccia grafica in c++...ho usato il c++ per poco solo con la console però un'idea del funzionamento me lo sono fatto...per creare l'interfaccia grafica sto seguendo qusta guida che mi è sembrata molto completa..
seguendo il loro esempio ottengo un programma cosi: Codice PHP:
Codice PHP:
Run-Time Check Failure #2 - Stack around the variable 'buff' was corrupted. e la variabile ptesto contiene una serie di caratteri cinesi... per fare il programma uso visual studio 2008 in un progetto win32..dove sbaglio? come posso risolvere? Ultima modifica di EmaGuzzetti : 07-08-2009 alle 10:13. |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jul 2007
Messaggi: 45
|
Ciao,
allora ... per quanto riguarda l'errore puoi risolverlo passando il l'address buffer e non il buffer stesso: SendMessage(hStat, WM_GETTEXT, 6, (LPARAM)&buff); io cmq ti consiglio di usare la GetWindowText. e per i caratteri cinesi il motivo è che la tua applicazione si aspetta di "girare" in unicode, quindi o la disattivi dalle opzioni del compilatore oppure specifichi direttamente ad ogni chiamata delle api che vuoi usare l'ASCII; puoi farlo mettendo una "A" alla fine di ogni nome funzione che chiami ... esempio: SendMessageA(hStat, WM_GETTEXT, 6, (LPARAM)&buff); però sappi che se decidi di usare l'unicode cose del tipo : pTesto = "Ciao!"; non le puoi fare. Comunque sulla guida che stai leggendo le spiega bene tutte queste cose. Ultima modifica di theking0 : 08-08-2009 alle 17:18. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Sep 2006
Messaggi: 311
|
per i caratteri cinesi ho preferito passare all'unicode modificandolo cosi:
Codice PHP:
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Jul 2007
Messaggi: 45
|
mhm scusa mi ero confuso per il buffer ... il modo giusto e questo:
SendMessageA(hBtnClose, WM_GETTEXT, (WPARAM)sizeof(buf), (LPARAM)buf); |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2006
Messaggi: 311
|
grazie! ora come posso utilizzare la stringa buff? se per esempio la uso in una messagebox mi da caratteri cinesi..
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Jun 2007
Città: Lecco
Messaggi: 250
|
Non sono un guru in C/C++, ma a quanto ricordo semplicemente non si può fare una cosa del tipo char buff[6] e sperare di farla franca... meglio una cosa del tipo:
che alloca 6 byte di memoria, a partire dall'indirizzo Codice:
buff Codice:
free(buff) Infine (non risponde molto alla tua domanda) consiglierei di dedicarti alla programmazione di GUI usando MFC (Microsoft Foundation Classes) che oltre ad essere un wrapper sopra le librerie win32 più facile da usare, è anche stato continuamente aggiornato e si è tenuto al pari con l'aspetto dei controlli nelle ultime versioni di windows. Il che, in parole povere, significa che un bottone fatto con win32 native sotto windows 7, apparirà come un bottone sotto windows 2000.
__________________
Asus P5Q PRO - Intel Core 2 Duo E8400 @3.2 GHz - 4GB G. Skill DDR2-1066 CL5 - Powercolor Radeon HD6870 PCS+ 1GB @940/5500 MHz - 200GB Maxtor SATAII + 1TB LaCie USB - LC-POWER Metatron Hyperion 700W PSU - Samsung XL2370 23'' Full HD LED Firmate - Per la sicurezza di noi tutti | Progetto Traduzione "The Void" |
![]() |
![]() |
![]() |
#7 | |||
Member
Iscritto dal: Jul 2007
Messaggi: 45
|
Quote:
comunque per ovviare al problema puoi dichiarare la variabile come : Codice:
TCHAR buf[6]; Quote:
Codice:
char *buff = (char *)malloc(sizeof(char) * 6) Codice:
char *buff = (char *) calloc(6, sizeof(char)); Quote:
|
|||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:29.