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.