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.