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