RPCSSMP.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:
Windows编程
开发平台:
Visual C++
- /****************************************************************************
- Microsoft RPC Version 2.0
- Copyright Microsoft Corp. 1992, 1993, 1994- 1996
- rpcssm Example
- FILE: rpcssmp.c
- PURPOSE: Remote procedures used in server application rpcssms
- FUNCTIONS: InOutList() - Adds new nodes to the list.
- COMMENTS: This distributed application uses the rpcssm package.
- ****************************************************************************/
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include "rpcssm.h" // header file generated by MIDL compiler
- void AllocateSmList( PBOX * ppBox, short sListSize );
- void InitList( PBOX pBox, long lStartValue );
- void PrintList( PBOX pBox );
- void * pvPersistent = NULL;
- void * pvNonPersistent = NULL;
- void
- InOutList( PBOX * ppBox )
- {
- /* As this routine executes in the enabled memory environment,
- a convienient way to allocate a non-persistent memory
- is to use RpcSmAllocate or RpcSsAllocate.
- */
- if ( ppBox) {
- PBOX p = *ppBox;
- while ( p->next )
- p = p->next;
- AllocateSmList( & p->next, 2 );
- }
- else {
- AllocateSmList( ppBox, 5 );
- }
- InitList( *ppBox, 0x98760000 );
- PrintList( *ppBox );
- /* To allocate a memory to be available after the call, means other
- than RpcS*Allocate with default allocators should be used.
- */
- if ( pvPersistent == NULL )
- {
- pvPersistent = malloc(100); /* or midl_user_allocate(100) */
- }
- pvNonPersistent = RpcSsAllocate( 100 );
- }
- /* The Shutdown procedure tells the server to stop listening */
- /* for client requests. */
- void Shutdown(void)
- {
- RPC_STATUS status;
- /* Freeing the persistent memory */
- if ( pvPersistent )
- free( pvPersistent );
- printf("Calling RpcMgmtStopServerListeningn");
- status = RpcMgmtStopServerListening(NULL);
- printf("RpcMgmtStopServerListening returned: 0x%xn", status);
- if (status) {
- exit(status);
- }
- printf("Calling RpcServerUnregisterIfn");
- status = RpcServerUnregisterIf(NULL, NULL, FALSE);
- printf("RpcServerUnregisterIf returned 0x%xn", status);
- if (status) {
- exit(status);
- }
- }
- //=====================================================================
- // List allocation/deallocation routines
- //=====================================================================
- void
- AllocateSmList( PBOX * ppBox, short sListSize)
- {
- PBOX pBox, head;
- int i = 0;
- //.. Allocate a list of boxes, if needed (when *ppBox==NULL).
- if ( *ppBox == NULL ) {
- RPC_STATUS status;
- head = 0;
- for (i = 0; i < sListSize; i++)
- {
- pBox = (PBOX) RpcSmAllocate( sizeof(LBOX), &status);
- if ( status != RPC_S_OK )
- {
- printf("AllocateList FAILED: not enough memoryn");
- break;
- }
- pBox->next = head;
- head = pBox;
- }
- *ppBox = head;
- }
- printf("%d nodes allocated.n", i);
- }
- //=====================================================================
- // Initialization and pprint routines
- //=====================================================================
- void InitList( PBOX pBox, long lStartValue )
- {
- int i = 0;
- while( pBox ) {
- pBox->data = lStartValue + ++i;
- pBox = pBox->next;
- }
- printf("%d nodes inited.n", i);
- }
- // --------------------------------------------------------------------
- void
- PrintList( PBOX pBox )
- {
- int i = 0;
- while( pBox ) {
- if ( (i % 4) != 0 )
- printf(" data[%d]= %lx", i, pBox->data);
- else
- printf("n data[%d]= %lx", i, pBox->data);
- pBox = pBox->next;
- i++;
- }
- printf("n" );
- }
- /* end file rpcssmp.c */