Freigeben über


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.