RpcSs-Speicherverwaltungspaket

Das standarde Zuweisungs-/Zuordnungspaar, das von den Stubs und der Laufzeit beim Zuweisen von Arbeitsspeicher im Auftrag der Anwendung verwendet wird, ist midl _ user _ allocate / midl _ user _ free. Sie können jedoch das RpcSs-Paket anstelle des Standardpakets auswählen, indem Sie das ACF-Attribut [ enable _ allocate ] verwenden. Das RpcSs-Paket besteht aus RPC-Funktionen, die mit dem Präfix RpcSs oder RpcSm beginnen. Das RpcSs-Paket wird für Windows Anwendungen nicht empfohlen.

Hinweis

Das Rpcss-Speicherverwaltungspaket ist veraltet. Es wird empfohlen, midl _ user _ allocate und midl _ user _ free an seiner Stelle zu verwenden.

Im Modus /osf wird das RpcSs-Paket automatisch für MIDL-generierte Stubs aktiviert, wenn vollständige Zeiger verwendet werden, wenn die Argumente eine Speicherbelegung erfordern oder das [ Attribut enable _ allocate ] verwendet wird. Im Standardmodus (Erweitert von Microsoft) ist das RpcSs-Paket nur aktiviert, wenn das [ Attribut enable _ allocate ] verwendet wird. Das [ Attribut enable _ allocate ] aktiviert die RpcSs-Umgebung durch die serverseitigen Stubs. Die Clientseite wird über die Möglichkeit benachrichtigt, dass das RpcSs-Paket aktiviert werden kann. Im Modus /osf ist die Clientseite nicht betroffen.

Wenn das RpcSs-Paket aktiviert ist, wird die Speicherbelegung auf serverseitiger Seite mit dem privaten RpcSs-Speicherverwaltungszuordnungs- und -Zuordnungspaar erreicht. Sie können Arbeitsspeicher mit demselben Mechanismus zuordnen, indem Sie RpcSmAllocate (oder RpcSsAllocate)aufrufen. Nach der Rückgabe vom Serverstub wird der gesamte vom RpcSs-Paket belegte Arbeitsspeicher automatisch freigegeben. Das folgende Beispiel zeigt, wie das RpcSs-Paket aktiviert wird:

/* ACF file fragment */

[ 
    implicit_handle(handle_t GlobalHandle),
    enable_allocate
]
interface iface
{
}

/*Server management routine fragment. Replaces p=midl_user_allocate(size); */

    p=RpcSsAllocate(size);                /*raises exception */
    p=RpcSmAllocate(size, &status);       /*returns error code */

Ihre Anwendung kann explizit Arbeitsspeicher freigeben, indem sie die RpcSsFree- oder RpcSmFree-Funktion aufruft. Beachten Sie, dass diese Funktionen nicht tatsächlich Arbeitsspeicher freigeben. Sie markieren sie zum Löschen. Die RPC-Bibliothek gibt den Arbeitsspeicher frei, wenn Ihr Programm RpcSsDisableAllocate oder RpcSsDisableAllocate aufruft.

Sie können auch die Speicherverwaltungsumgebung für Ihre Anwendung aktivieren, indem Sie die RpcSmEnableAllocate-Routine aufrufen (und sie deaktivieren, indem Sie die RpcSmDisableAllocate-Routine aufrufen). Nach der Aktivierung kann Der Anwendungscode Speicher zuweisen und die Zuordnung wieder aufteilen, indem Funktionen aus dem RpcSs-Paket aufgerufen werden.