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

Windows编程

开发平台:

Visual C++

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