Newsgroup: it.comp.programmare.win32
Titolo: createthread sotto mfc

ho dichiarato una proc chiamata DWORD stampa()...
sto utilizzando il compilatore Visual C++ 6.0
quando vado a richiamare la funzione CreateThread(NULL,0,Stampa...)
il compilatore mi da errore e mi dice che c`e` un errore nel terzo
parametro, nel senso che va dichiarato (io credo) dopo DWORD una macro o
quant`altro (WINAPI e` da scartare, ma sicuramente esistera` qualcosa di
simile per l`MFC)
ciao e grazie in anticipo dell`aiuto!!!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 parametro, nel senso che va dichiarato (io credo) dopo DWORD una macro o
l'errore esatto sarebbe interessante, puoi riportare per intero cosa rileva
il compilatore ?
Ciao
Porlock

 
  Ciao, eccoti l`errore del compilatore:
  error C2664: CreateThread : cannot convert parameter 3 from unsigned
  long (void) to unsigned long (__cdecl) (void*) 


   long (void) to unsigned long (__cdecl) (void*)
Un buon vecchio cast
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Stampa, ecc ecc )
Ciao,
 Zello

 ciao e grazie in anticipo dell`aiuto!!!
la funzione deve essere dichiarata WINAPI :
DWORD WINAPI Stampa(LPVOID lpParameter)
...........
e stai attento alle miuscole/minuscole
ciao

 ciao
ho provato ha dichiararla come DWORD WINAPI Stampa, ma mi da sempre 
lo stesso errore, dato che mi diceva che il terzo parametro andava
dichiarato
come __cdecl, sono andato su windef.h e ho visto che la define per
__cdecl
e` WINAPIV, ho provato anche cosi`, ma niente
la mia applicazione e` semplice, di tipo Dialog based, e all`interno
della classe
MIaClasseDlg, ho dichiarato Stampa...
francamente non capisco dov`e` l`errore, mi sto leggendo il libro di
Jeffrey Ritcher
"Programmare applicazioni per Windows" per capire il multitasking, ma
sul mio
programma non riesco ad implementare questa CreateThread...
ciao e grazie in anticipo



Come hai dichiarato la funzione Stampa ?
DWORD Stampa(LPVOID pParam) ?
oppure
DWORD Stampa( ) ?
perché dall'errore da te segnalato sembra che la tua funzione non prenda
alcun parametro, mentre dovrebbe accettare LPVOID.
Ciao

 Ciao
Ciao e grazie del consiglio, ma niente...
Ho provato prima a dichiararla (all`interno della mia classe Cdialog)
come
DWORD WINAPI Stampa(LPVOID lParam)
e mi dava l`errore 2664
ho provato a dichiararla come 
DWORD Stampa(LPVOID lParam)
uguale, errore 2664
IL messaggio d`errore completo e`:
error C2664 CreateThread: cannot convert parameter 3 from unsigned long
(void*)
to unsigned long (__cdecl*) (void*), None of the functions with this
name
in scope match the target type
Forse l`ultima frase e` importante: e` forse un problema di scope della
proc,
cioe` dove e` dichiarata???
io l`ho dichiarata come funzione public all`interno della dichiarazione
della classe dialog
...
ciao


 simile per l`MFC)
Le MFC mettono a disposizione la funzione globale AfxBeginThread, prova a
darle un'occhiata
--
  Jerle Shannara
Per rispondere in email togli JERLEANTISPAM
homepage 
http://utenti.tripod.it/jerleshannara

 ha scritto nel messaggio
news:68185e708d0e699ac1...@mygate.mailgate.org...

hai definito la funzione come metodo di una classe?

 ciao
Attenzione !
La funzione non può essere una funzione membro di una classe !
O meglio la funzione del thread, può essere una funzione globale o una
funzione membro di tipo static.
Ecco alcuni esempi per chiarire:
DWORD Stampa(LPVOID pParam)
{
....
}
CreateThread(NULL, 0, Stampa, ....)
oppure nel caso di funzione membro static.
class CDailog
{
static DWORD Stampa(LPVOID pParam);
}
DWORD CDialog::Stampa(LPVOID pParam)
{
....
}
CreateThread(NULL, 0, CDialog::Stampa, ....)
ma non puoi utilizzare come procedura del thread una funzione membro non
statica.
Dovremmo essere giunti alla soluzione del tuo problema.
Ciao