Condividi tramite


Attributi di lunghezza, dimensioni e direzione

In passaggio di matrici tra il client e il server, gli attributi correlati alle dimensioni [max_is] e [size_is] determinano il numero di elementi della matrice allocati dallo stub del server. Gli attributi correlati alla lunghezza [length_is], [first_is]e [last_is] determinano il numero di elementi trasmessi sia al server che al client.

È possibile applicare attributi direzionali diversi ai parametri. Tuttavia, alcune combinazioni di attributi direzionali possono causare errori. Si supponga, ad esempio, di scrivere un'interfaccia che specifica una routine con due parametri, una matrice e la lunghezza trasmessa della matrice. Il termine dir_attr fa riferimento all'attributo direzionale applicato al parametro come:

Proc1(
    [dir_attr] short *plength;
    [dir_attr, length_is(pLength)] short array[MAX_SIZE]);

Il comportamento del compilatore MIDL per ogni combinazione di attributi direzionali è descritto nella tabella seguente.

Array Parametro Lunghezza Azioni Stub durante la chiamata dal client al server Azioni Stub sul ritorno dal server al client
[in] [in] Trasmettere la lunghezza e il numero di elementi indicati dal parametro. Nessun dato trasmesso.
[in] [out] Non legale; Errore del compilatore MIDL. Non legale; Errore del compilatore MIDL.
[in] [in, out] Trasmettere la lunghezza e il numero di elementi indicati dal parametro di lunghezza. Trasmettere solo la lunghezza.
[out] [in] Trasmettere la lunghezza.
Se le dimensioni della matrice sono fisse, allocare le dimensioni della matrice nel server, ma non trasmettere alcun elemento.
Se le dimensioni della matrice non sono associate, non legali: errore del compilatore MIDL.
Trasmettere il numero di elementi indicati dalla lunghezza.
Si noti che la lunghezza può essere modificata e può avere un valore diverso dal valore nel client. Non trasmettere la lunghezza.
[out] [out] Allocare spazio per il parametro di lunghezza nel server, ma non trasmettere il parametro. Se la dimensione della matrice è fissa, allocare le dimensioni della matrice nel server, ma non trasmettere alcun elemento.
Se le dimensioni della matrice non sono fisse, non legali: errore del compilatore MIDL.
Trasmettere la lunghezza e il numero di elementi indicati dalla lunghezza impostata dall'applicazione server.
[out] [in, out] Trasmettere il parametro di lunghezza. Se la dimensione della matrice è associata, allocare le dimensioni della matrice nel server, ma non trasmettere alcun elemento.
Se le dimensioni della matrice non sono associate, non legali: errore del compilatore MIDL.
Trasmettere la lunghezza. Trasmettere il numero di elementi della matrice indicati dalla lunghezza.
[in, out] [in] Trasmettere la lunghezza e il numero di elementi indicati dal parametro. Non trasmettere la lunghezza. Trasmettere il numero di elementi indicati dalla lunghezza.
Si noti che la lunghezza può essere modificata e può avere un valore diverso dal valore originale nel client.
[in, out] [out] Non legale; Errore del compilatore MIDL. Non legale; Errore del compilatore MIDL.
[in, out] [in, out] Trasmettere la lunghezza e il numero di elementi indicati dal parametro. Trasmettere la lunghezza e il numero di elementi indicati dal parametro.

In generale, non è consigliabile modificare i parametri di lunghezza o dimensioni sul lato server. Se si modifica il parametro di lunghezza, è possibile orfana memoria. Per altre informazioni, vedere Orfano della memoria.