Kombinieren von Arrayattributen

Feldattribute können in verschiedenen Kombinationen bereitgestellt werden, solange der Stub die Informationen verwenden kann, um die Größe des Arrays und die Anzahl der Bytes zu bestimmen, die an den Server übertragen werden sollen. Die Beziehungen zwischen den Attributen werden mithilfe der folgenden Formeln definiert:

size_is = max_is + 1;
length_is = last_is - first_is + 1;

Die werte, die den Attributen zugeordnet sind, müssen mehrere regeln für den allgemeinen Sinn befolgen, die auf diesen Formeln basieren. Zu diesen Regeln gehören:

  • Geben Sie nicht an, dass ein [ first _ is ] index value kleiner als 0 (null) oder ein [ letzter _ wert ] größer als max [ _ ist. ]
  • Geben Sie keine negative Größe für ein Array an. Definieren Sie das erste und das letzte Element, sodass sie zu einem Längenwert von 0 (null) oder größer führen. Definieren Sie den [ Wert max _ is ] , sodass die Größe 0 (null) oder größer ist. Wenn MIDL mit der Checkoption /error bounds aufgerufen _ wurde, löst der Stub eine Ausnahme aus, wenn die Größe kleiner als 0 (null) oder die übertragene Länge kleiner als 0 (null) ist.
  • Verwenden Sie nicht die [ Länge _ ist ] , und last [ _ ist ] Attribute zur gleichen Zeit, und die Größe [ _ ist ] und last [ _ ist ] Attribute gleichzeitig.

Aufgrund der engen Beziehung in C zwischen Arrays und Zeigern können Sie mit MIDL auch Arrays in Parameterlisten mit Zeiger notation deklarieren. MIDL behandelt einen Parameter, der ein Zeiger auf einen Typ ist, als Array dieses Typs, wenn der Parameter über eines der Attribute verfügt, die häufig Arrays zugeordnet sind.

/* IDL file */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45)
  version(6.0) 
]
interface arraytest
{
  void fArray6([in] short sSize, 
               [in, out, size_is(sSize)] char * p1);
  void fArray7([in] short sSize, 
               [in, out, size_is(sSize)] char achArray[]);
}

Im vorherigen Beispiel sind die Array- und Zeigerparameter in den Funktionen fArray6 und fArray7 gleichwertig.