USRDEFS.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /****************************************************************************
  2.                    Microsoft RPC Version 2.0
  3.            Copyright Microsoft Corp. 1992, 1993, 1994- 1996
  4.                        usrdef Example
  5.     FILE:       usrdefs.c
  6.     USAGE:      usrdefs  -p protocol_sequence
  7.                          -e endpoint
  8.                          -m max calls
  9.                          -n min calls
  10.                          -f flag for RpcServerListen
  11.     PURPOSE:    Server side of RPC distributed application usrdef
  12.     FUNCTIONS:  main() - registers server as RPC server
  13.     COMMENTS:   This distributed application uses a user-defined handle.
  14. ****************************************************************************/
  15. #include <stdlib.h>
  16. #include <stdio.h>
  17. #include <ctype.h>
  18. #include "usrdef.h"    // header file generated by MIDL compiler
  19. #define PURPOSE 
  20. "This Microsoft RPC Version 2.0 sample program demonstratesn
  21. the use of user-defined handles. For more informationn
  22. about the [handle] attribute and RPC API functions, see then
  23. RPC programming guide and reference.nn"
  24. void Usage(char * pszProgramName)
  25. {
  26.     fprintf(stderr, "%s", PURPOSE);
  27.     fprintf(stderr, "Usage:  %sn", pszProgramName);
  28.     fprintf(stderr, " -p protocol_sequencen");
  29.     fprintf(stderr, " -e endpointn");
  30.     fprintf(stderr, " -m maxcallsn");
  31.     fprintf(stderr, " -n mincallsn");
  32.     fprintf(stderr, " -f flag_wait_opn");
  33.     exit(1);
  34. }
  35. void _CRTAPI1 main(int argc, char * argv[])
  36. {
  37.     RPC_STATUS status;
  38.     unsigned char * pszProtocolSequence = "ncacn_np";
  39.     unsigned char * pszSecurity         = NULL;
  40.     unsigned char * pszEndpoint         = "\pipe\usrdef";
  41.     unsigned int    cMinCalls           = 1;
  42.     unsigned int    cMaxCalls           = 20;
  43.     unsigned int    fDontWait           = FALSE;
  44.     int i;
  45.     /* allow the user to override settings with command line switches */
  46.     for (i = 1; i < argc; i++) {
  47.         if ((*argv[i] == '-') || (*argv[i] == '/')) {
  48.             switch (tolower(*(argv[i]+1))) {
  49.             case 'p':  // protocol sequence
  50.                 pszProtocolSequence = argv[++i];
  51.                 break;
  52.             case 'e':
  53.                 pszEndpoint = argv[++i];
  54.                 break;
  55.             case 'm':
  56.                 cMaxCalls = (unsigned int) atoi(argv[++i]);
  57.                 break;
  58.             case 'n':
  59.                 cMinCalls = (unsigned int) atoi(argv[++i]);
  60.                 break;
  61.             case 'f':
  62.                 fDontWait = (unsigned int) atoi(argv[++i]);
  63.                 break;
  64.             case 'h':
  65.             case '?':
  66.             default:
  67.                 Usage(argv[0]);
  68.             }
  69.         }
  70.         else
  71.             Usage(argv[0]);
  72.     }
  73.     status = RpcServerUseProtseqEp(pszProtocolSequence,
  74.                                    cMaxCalls,
  75.                                    pszEndpoint,
  76.                                    pszSecurity);  // Security descriptor
  77.     printf("RpcServerUseProtseqEp returned 0x%xn", status);
  78.     if (status) {
  79.         exit(status);
  80.     }
  81.     status = RpcServerRegisterIf(usrdef_ServerIfHandle, // interface to register
  82.                                  NULL,   // MgrTypeUuid
  83.                                  NULL);  // MgrEpv; null means use default
  84.     printf("RpcServerRegisterIf returned 0x%xn", status);
  85.     if (status) {
  86.         exit(status);
  87.     }
  88.     printf("Calling RpcServerListenn");
  89.     status = RpcServerListen(cMinCalls,
  90.                              cMaxCalls,
  91.                              fDontWait);
  92.     printf("RpcServerListen returned: 0x%xn", status);
  93.     if (status) {
  94.         exit(status);
  95.     }
  96.     if (fDontWait) {
  97.         printf("Calling RpcMgmtWaitServerListenn");
  98.         status = RpcMgmtWaitServerListen();  //  wait operation
  99.         printf("RpcMgmtWaitServerListen returned: 0x%xn", status);
  100.         if (status) {
  101.             exit(status);
  102.         }
  103.     }
  104. }  // end main()
  105. /*********************************************************************/
  106. /*                 MIDL allocate and free                            */
  107. /*********************************************************************/
  108. void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len)
  109. {
  110.     return(malloc(len));
  111. }
  112. void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
  113. {
  114.     free(ptr);
  115. }
  116. /* end file usrdefs.c */