Newsgroup: it.comp.programmare.win32
Titolo: Cosa non va?

Eccovi uno spezzone del codice di un mio programma. E' in C con le
API. Sotto vi descrivo il problema. 
***********************************************************
[...]
case WM_CREATE:
		hInstance = (HINSTANCE) GetWindowLong (hwnd,
GWL_HINSTANCE);
[...]
case WM_COMMAND:
		switch (LOWORD (wParam))
		{
		case IDM_PUNTEGGI_VIEW:
			DialogBox (hInstance, TEXT ("ViewScore"),
hwnd, ScoreDlg);
			return 0;
[...]
BOOL CALLBACK ScoreDlg (HWND hDlg, UINT message, WPARAM wParam, LPARAM
lParam)
{
	char cmessage[100], totX[2], totO[2], totPi[2], totP[2],
percX[2], percO[2], puntiX[3], puntiO[3];
	HWND hScoreTxt;
 
	switch (message)
	{
	case WM_INITDIALOG:
		//NOTA: la struct score è dichiarata come globale
		itoa (score.percOwin, percO, 10);
		[...]//converte tutti i vari valori 
		itoa (score.puntiX, puntiX, 10);
		strcpy (cmessage, "% vittorie computer: ");
		strcat (cmessage, percO);
		[...] //crea il messaggio
		strcat (cmessage, "\nPUNTI computer: ");
		strcat (cmessage, puntiO);
		hScoreTxt = GetDlgItem (hDlg, IDC_SCORE);
		SetWindowText (hScoreTxt, cmessage);
		return TRUE;
	case WM_COMMAND:
		switch (LOWORD (wParam))
		{
		case IDOK:
			EndDialog (hDlg, 0);
			return TRUE;
		}
		break;
	}
	return FALSE;
}
[...]
***********************************************************
il compilatore non mi da problemi, ma quando eseguo il programma e
chiamo la finestra mi appare il messaggio di errore di windows.
Questo è l'output che mi viene dato (una parte di esso) quando provo a
fare il debug e a chiamare la finestra di dialogo.
***********************************************************
First-chance exception in tris.exe: 0xC0000005: Access Violation.
The thread 0xFFE6AD65 has exited with code -1 (0xFFFFFFFF).
The program '\tris.exe' has exited with code -1 (0xFFFFFFFF).
***********************************************************
QUALCUNO MI AIUTIII ^_^
GRAZIE


Quanto sono grandi i valori contenuti in score ? Non vorrei che
sforasse la dimensione di percO o puntiX (basta che score.percOwin sia
100 e non ci sta).
Quando io devo fare operazioni su stringhe come quelle che devi fare
tu (strcpy e strcat) io preferisco usare la wsprintf (o la sprintf se
devi visualizzare float).
Il tutto potrebbe diventare
wsprintf(cmessage,"% vittorie computer: %d PUNTI computer:
%d",score.percOwin,score.puntiO) o qualcosa di simile.
Ciao
Stefano
PS.
Ti consiglio di usare subject piu' precisi quando scrivi un post, non
e' detto che chi legge "Cosa non va?" sia invogliato ad aprire il
post.
Stefano "HappyMan" 
--
IABLA Sezione Lago Maggiore (NO)
Web 
http://happyman.n3.net
 [Foto salseri/e & I.A.B.L.A. Ring]
Email: 
happyman...@libero.it
 [Togliere nospam per scrivermi]

post.
OK !!

 sia 100 e non ci sta).
Per essere precisi basta che superi 9 e non ci stà (sono dichiarate come 
char[2] e quindi possono contenere al massimo un carattere ed il 
terminatore).
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

 Pultroppo non è questo il problema... (almeno credo) :-(
prova a trovare la funzione che chima l'eccezione e verifica che i parametri
non abbiano valori
strani ,tipo null;prova anche a chiamare getlasterror() per avere una
descrizione più specifica dell'errore.
ciao.

grazie a tutti.. ho risolto il problema... ho controllato e
ricontrollato e ho scoperto che la variabile cmessage che era un'array
da 100 non bastava a tenere tutto il messaggio.... davvero un'errore
banale ....

Immagine dello stack:
[...]
Questo, purtroppo, va oltre le mie capacità
In definitiva: sembra che tu abbia passato un puntatore a funzione non 
valido da qualche parte. Ricontrolla il codice, e compila sempre con i 
simboli di debug, così puoi sapere di preciso qual è l'istruzione 
incriminata