RpcSs 메모리 관리 패키지
애플리케이션을 대신하여 메모리를 할당할 때 스텁 및 런타임에서 사용하는 기본 할당자/할당 취소자 쌍은 midl_user_allocate/midl_user_free. 그러나 [enable_allocate] ACF 특성을 사용하여 기본값 대신 RpcSs 패키지를 선택할 수 있습니다. RpcSs 패키지는 접두사 RpcSs 또는 RpcSm시작하는 RPC 함수로 구성됩니다. Windows 애플리케이션에는 RpcSs 패키지를 사용하지 않는 것이 좋습니다.
메모
Rpcss 메모리 관리 패키지는 사용되지 않습니다. midl_user_allocate 및 midl_user_free 대신 사용하는 것이 좋습니다.
/osf 모드에서는 전체 포인터가 사용되거나 인수에 메모리 할당이 필요한 경우 또는 [enable_allocate] 특성을 사용한 결과로 MIDL에서 생성된 스텁에 RpcSs 패키지가 자동으로 사용하도록 설정됩니다. 기본(Microsoft 확장) 모드에서 RpcSs 패키지는 [enable_allocate] 특성을 사용하는 경우에만 사용하도록 설정됩니다. [enable_allocate] 특성을 사용하면 서버 쪽 스텁에서 RpcSs 환경을 사용할 수 있습니다. 클라이언트 쪽에서 RpcSs 패키지를 사용할 수 있다는 경고가 표시됩니다. /osf 모드에서는 클라이언트 쪽이 영향을 받지 않습니다.
RpcSs 패키지를 사용하도록 설정하면 개인 RpcSs 메모리 관리 할당자 및 할당 취소자 쌍을 사용하여 서버 쪽의 메모리 할당이 수행됩니다. RpcSmAllocate(또는 RpcSsAllocate)를 호출하여 동일한 메커니즘을 사용하여 메모리를 할당할 수 있습니다. 서버 스텁에서 반환되면 RpcSs 패키지에 의해 할당된 모든 메모리가 자동으로 해제됩니다. 다음 예제에서는 RpcSs 패키지를 사용하도록 설정하는 방법을 보여 줍니다.
/* 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 */
애플리케이션은 RpcSsFree 호출하거나 RpcSmFree함수를명시적으로 메모리를 해제할 수 있습니다. 이러한 함수는 실제로 메모리를 해제하지 않습니다. 삭제를 위해 표시합니다. RPC 라이브러리는 프로그램이 RpcSsDisableAllocate 호출하거나 RpcSsDisableAllocate메모리를 해제합니다.
RpcSmEnableAllocate 루틴을 호출하여 애플리케이션에 대한 메모리 관리 환경을 사용하도록 설정할 수도 있습니다(RpcSmDisableAllocate 루틴을 호출하여 사용하지 않도록 설정할 수 있습니다.) 사용하도록 설정되면 애플리케이션 코드는 RpcSs 패키지에서 함수를 호출하여 메모리를 할당 및 할당 취소할 수 있습니다.