Tutte cose giustissime, non avevo osservato con attenzione il codice.Originariamente inviato da Il Totem
Io ho individuato due errori:
1- Off By One alla riga:
Perchè così facendo esegui l'iterazione Come.Length+1 volte e in questo modo avviene il riferimento a un oggetto che non esiste, essendo appena fuori dall'array. Per correggere devi usare una di queste due sintassi:codice:For c = 0 To Com.Length '<-------------------------------/// Return Com(c) Next
oppurecodice:For c = 0 To Com.Length - 1 Return Com(c) Next
2- Alla riga:codice:For c = 1 To Com.Length Return Com(c) Next
Oltre a restituire un valore, return termina anche la funzione e quindi otterresti sempre il primo elemento dell'array. Devi dare alla funzione un tipo SERVS1Result() e restituire Com:codice:For c = 0 To Com.Length - 1 Return Com(c) '<-------------------------/// Next
codice:Return Com
Mantiene in memoria gli elementi già presenti nell'array; di seguito uno schemino C/VB per chiarirci:Poi, una cosa la chiedo io: cosa fa Preserve dopo ReDim?
Come si può immaginare il memcpy porta via un bel po' di tempo...codice:VB C Dim x(100) As Integer ===========>+- int * x; +- x=malloc(100*sizeof(int); '... /*...*/ ReDim x(200) ====================>+- int * temp; | temp=x; | x=malloc(200*sizeof(int)); +- free(temp); '... /*...*/ ReDim Preserve x(210) ===========>+- int * temp2; | temp2=x; | x=malloc(210*sizeof(int)); | memcpy(x, temp2, 200*sizeof(int)); /*ecco il preserve in azione*/ +- free(temp2);

Rispondi quotando