Die midl_user_allocate-Funktion

Die midl_user_allocate-Funktion ist eine Prozedur, die von Entwicklern von RPC-Anwendungen bereitgestellt werden muss. Es ordnet Arbeitsspeicher für die RPC-Stubs und Bibliotheksroutinen zu. Ihre midl_user_allocate-Funktion muss mit dem folgenden Prototyp übereinstimmen:

void __RPC_FAR * __RPC_USER midl_user_allocate (size_t cBytes);

Der Parameter cBytes gibt die Anzahl der zuzuordnenden Bytes an. Sowohl Client- als auch Serveranwendungen müssen die midl_user_allocate-Funktion implementieren, es sei denn, Sie kompilieren im OSF-Kompatibilitätsmodus (/osf). Anwendungen und generierte Stubs rufen midl_user_allocate direkt oder indirekt auf, um zugeordnete Objekte zu verwalten. Beispiel:

  • Die Client- und Serveranwendungen rufen midl_user_allocate auf, um Arbeitsspeicher für die Anwendung zuzuweisen, z. B. beim Erstellen eines neuen Knotens in einer Struktur oder einer verknüpften Liste.
  • Der Serverstub ruft midl_user_allocate auf, wenn Daten im Adressraum des Servers entmarsen.
  • Der Clientstub ruft midl_user_allocate auf, wenn daten vom Server entfernt werden, auf den durch einen [out]-Zeiger verwiesen wird. Beachten Sie, dass der Clientstub für [in], [out] und [unique] Zeiger nur midl_user_allocate aufruft, wenn der [eindeutige] Zeigerwert bei der Eingabe NULL war und während des Aufrufs in einen Wert ungleich NULL geändert wird. Wenn der [eindeutige] Zeiger bei der Eingabe ungleich NULL war, schreibt der Clientstub die zugeordneten Daten in den vorhandenen Arbeitsspeicher.

Wenn midl_user_allocate nicht Arbeitsspeicher zuweisen kann, sollte ein NULL-Zeiger zurückgegeben werden.

Die midl_user_allocate-Funktion sollte einen 8-Byte-ausgerichteten Zeiger zurückgeben.

Beispielsweise implementieren die mit dem Platform Software Development Kit (SDK) bereitgestellten Beispielprogramme midl_user_allocate in Bezug auf die Malloc-Funktion C:

void __RPC_FAR * __RPC_USER midl_user_allocate(size_t cBytes)
{
    return((void __RPC_FAR *) malloc(cBytes));
}

Hinweis

Wenn das RpcSs-Paket aktiviert ist (z. B. als Ergebnis der Verwendung des Attributs [ enable_allocate], verwenden Sie RpcSmAllocate , um Arbeitsspeicher auf der Serverseite zuzuweisen. Weitere Informationen zu [enable_allocate] finden Sie unter MIDL-Referenz.