RpcSs-Speicherverwaltungspaket
Das Standardzuordnungs-/Deallocatorpaar, das von den Stubs und der Laufzeit verwendet wird, wenn Speicher im Auftrag der Anwendung zugewiesen wird, wird midl_user_free midl_user_allocate/. 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 /osf-Modus wird das RpcSs-Paket für VON MIDL generierte Stubs automatisch aktiviert, wenn vollständige Zeiger verwendet werden, wenn die Argumente eine Speicherbelegung erfordern oder als Ergebnis der Verwendung des [enable_allocate]- Attributs. 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 ist. Im /osf-Modus ist die Clientseite nicht betroffen.
Wenn das RpcSs-Paket aktiviert ist, erfolgt die Speicherbelegung auf serverseitiger Seite mit dem privaten RpcSs-Speicherverwaltungs-Zuweisungs- und Deallocatorpaar. Sie können Arbeitsspeicher mithilfe desselben Mechanismus zuordnen, indem Sie RpcSmAllocate (oder RpcSsAllocate) aufrufen. Nach der Rückgabe vom Serverstub wird der gesamte vom RpcSs-Paket zugewiesene Arbeitsspeicher automatisch freigegeben. Im folgenden Beispiel wird gezeigt, 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 es zum Löschen. Die RPC-Bibliothek gibt den Arbeitsspeicher frei, wenn Ihr Programm RpcSsDisableAllocate oder RpcSsDisableAllocate aufruft.
Sie können die Speicherverwaltungsumgebung für Ihre Anwendung auch aktivieren, indem Sie die RpcSmEnableAllocate-Routine aufrufen (und sie durch Aufrufen der RpcSmDisableAllocate-Routine deaktivieren). Nach der Aktivierung kann der Anwendungscode Speicher zuweisen und die Zuordnung aufheben, indem Funktionen aus dem RpcSs-Paket aufgerufen werden.