RpcSs-Speicherverwaltungspaket
Das Standard-Allocator-/Deallocator-Paar, das von den Stubs und der Laufzeit verwendet wird, wenn der Speicher im Auftrag der Anwendung midl_user_allocate/midl_user_freewird. 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.
Anmerkung
Das Rpcss-Speicherverwaltungspaket ist veraltet. Es wird empfohlen, dass midl_user_allocate und midl_user_free an ihrem Ort verwendet werden.
Im modus /osf wird das RpcSs-Paket automatisch für MIDL-generierte Stubs aktiviert, wenn vollständige Zeiger verwendet werden, wenn die Argumente Speicherzuweisung erfordern oder aufgrund der Verwendung des [enable_allocate] Attributs. Im Standardmodus (Erweiterter Microsoft)-Modus ist das RpcSs-Paket nur aktiviert, wenn das [enable_allocate] Attribut verwendet wird. Das attribut [enable_allocate] ermöglicht die RpcSs-Umgebung durch die serverseitigen Stubs. Die Clientseite wird auf die Möglichkeit hingewiesen, dass das RpcSs-Paket aktiviert werden kann. Im /osf Modus ist die Clientseite nicht betroffen.
Wenn das RpcSs-Paket aktiviert ist, wird die Zuordnung des Arbeitsspeichers auf der Serverseite mit dem privaten RpcSs-Speicherverwaltungs-Allocator- und Deallocator-Paar erreicht. Sie können Arbeitsspeicher mithilfe desselben Mechanismus zuordnen, indem Sie RpcSmAllocate aufrufen (oder RpcSsAllocate). Nach der Rückgabe vom Server-Stub wird der gesamte vom RpcSs-Paket zugewiesene Speicher 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 funktion RpcSsFree oder RpcSmFree aufrufen. Beachten Sie, dass diese Funktionen nicht tatsächlich Arbeitsspeicher freigeben. Sie markieren sie zum Löschen. Die RPC-Bibliothek gibt den Speicher frei, wenn Ihr Programm RpcSsDisableAllocate oder RpcSsDisableAllocateaufruft.
Sie können die Speicherverwaltungsumgebung für Ihre Anwendung auch aktivieren, indem Sie die RpcSmEnableAllocate Routine aufrufen (und Sie können sie deaktivieren, indem Sie die RpcSmDisableAllocate Routine aufrufen). Nach der Aktivierung kann Der Anwendungscode Speicher zuordnen und umteilen, indem Funktionen aus dem RpcSs-Paket aufgerufen werden.