Salve mi scuso con i moderatori perchè questa domanda è sostanzialmente una riformulazione di quella che ho già fatto ([c & DDK - due parametri a un driver]).La riformulo cercando di focalizzarla sulla parte del problema che realmente non riesco a risolvere perchè mi sono reso conto che probabilmente il tema driver non è familiare a molti (me compreso...) e anche chi potrebbe aiutarmi non la considera nemmeno perchè pensa di non essere ferrato in materia...speriamo bene...perchè fin'ora zero risposte,ad ogni modo se i moderarori vogliono cancellare l'altra discussione nessun problema da parte mia.
Venendo al dunque:io ho una funzione che prende un puntatore a void contenente tutti i dati che le servono accodati l'uno dietro all'altro e un intero che gli indica la dimensione totale dei dati.Dall'esterno io devo riuscire a costruire appunto un buffer in cui siano accodati di seguito una struttura con vari campi ed un intero,passare il buffer alla mia funzione, e all'interno della funzione riuscire ad estrarre i dati dal buffer sapendo già come sono strutturati al suo interno (cioè se venga prima la struttura o l'intero e quanto è grande la struttura).
Per farlo ho operato così:
codice:
//costruzione del buffer:
Mystruct struct;
...........
char* data = (char*)malloc(sizeof(MyStruct) + sizeof(int));
//if(!data)
.......
memcpy (data,&struct, sizeof(MyStruct));
memcpy (data + sizeof(MyStruct),&MyInt, sizeof(int));
//estrazione dati dal buffer all'iterno della funz:
void MyFunct(void * buff,int dataSize)
{
.............
Mystruct *struct;
int *pMyInt;
struct = (MyStruct *)buff;
buff+=sizeof(Mystruct); ///<-------- il compilatore si arrabbia
pMyInt = (int*)buffr;
//alla fine della fiera *pMyInt e struct->questo,struct->quell'altro...dovrebbero
//contenee i dati che mi servono
}
-Il problema è che il compilatore non è d'accordo con me su quell'incremento del
puntatore a void,mi dice che non conosce la dimensione.
-Per la costruzione del buffer invexce non mi da problemi (almeno in compilazione poi si vedrà)
-C'è da dire anche che io questo codice lo devo inserire,la parte di sotto in un driver scritto in c e quindi tutto ok,ma la parte di sopra in un'applicazione scritta in C++ usando le MFC,cioè all'interno di un metodo,e non è il massimo inserire istruzioni prettamente C come memcpy o malloc in un programma in C++.
Quindi se qualcuno sapesse dirmi come risolvere il mio problema di trasferimento di dati in maniera semplice ed elegante glie ne sarei mooolto grato.
PS.Non suggeritemi una cosa ovvia come :"perchè non scrivi Myfunct in modo che i dati li prenda separatemente in vari parametri e non accorpati in un'unico buffer?",semplicemente perchè MyFunct è una chiamata di sistema che si usa così e basta.
Thanks,ciao