Udostępnij za pośrednictwem


Funkcja midl_user_allocate

Funkcja midl_user_allocate to procedura, która musi być dostarczana przez deweloperów aplikacji RPC. Przydziela pamięć dla wycinków RPC i procedur biblioteki. Funkcja midl_user_allocate musi być zgodna z następującym prototypem:

void __RPC_FAR * __RPC_USER midl_user_allocate (size_t cBytes);

Parametr cBytes określa liczbę bajtów do przydzielenia. Zarówno aplikacje klienckie, jak i aplikacje serwerowe muszą implementować funkcję midl_user_allocate, chyba że kompilujesz się w trybie zgodności OSF (/osf). Aplikacje i wygenerowane wycinki wywołania midl_user_allocate bezpośrednio lub pośrednio w celu zarządzania przydzielonymi obiektami. Na przykład:

  • Aplikacje klienckie i serwerowe wywołają midl_user_allocate w celu przydzielenia pamięci dla aplikacji, na przykład podczas tworzenia nowego węzła w drzewie lub połączonej liście.
  • Łącznik serwera wywołuje midl_user_allocate podczas odłączania danych do przestrzeni adresowej serwera.
  • Funkcja wycinkowa klienta wywołuje midl_user_allocate podczas odłączania danych z serwera, do którego odwołuje się wskaźnik [out]. Należy pamiętać, że w przypadku wskaźników [in], [out] i [unique] wycinków klienta wywołuje midl_user_allocate tylko wtedy, gdy wartość wskaźnika [unique] miała wartość null w danych wejściowych i zmienia się na wartość inną niż null podczas wywołania. Jeśli wskaźnik [unique] był inny niż null w danych wejściowych, element końcowy klienta zapisuje skojarzone dane w istniejącej pamięci.

Jeśli midl_user_allocate nie można przydzielić pamięci, powinien zwrócić wskaźnik o wartości null.

Funkcja midl_user_allocate powinna zwrócić wskaźnik wyrównany 8 bajtów.

Na przykład przykładowe programy dostarczane z zestawem Sdk (Platform Software Development Kit) implementują midl_user_allocate pod względem funkcji C malloc:

void __RPC_FAR * __RPC_USER midl_user_allocate(size_t cBytes)
{
    return((void __RPC_FAR *) malloc(cBytes));
}

Nuta

Jeśli pakiet RpcSs jest włączony (na przykład w wyniku użycia atrybutu [ enable_allocate]), użyj RpcSmAllocate w celu przydzielenia pamięci po stronie serwera. Aby uzyskać dodatkowe informacje na temat [enable_allocate], zobacz MIDL Reference.