Originariamente inviato da Il Totem
Io ho individuato due errori:
1- Off By One alla riga:
codice:
For c = 0 To Com.Length '<-------------------------------///
  Return Com(c) 
Next
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 - 1
  Return Com(c) 
Next
oppure
codice:
For c = 1 To Com.Length
  Return Com(c) 
Next
2- Alla riga:
codice:
For c = 0 To Com.Length - 1
  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:
Return Com
Tutte cose giustissime, non avevo osservato con attenzione il codice.
Poi, una cosa la chiedo io: cosa fa Preserve dopo ReDim?
Mantiene in memoria gli elementi già presenti nell'array; di seguito uno schemino C/VB per chiarirci:
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);
Come si può immaginare il memcpy porta via un bel po' di tempo...