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

Rispondi quotando