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

Windows编程

开发平台:

Visual C++

  1. /*************************************************************************
  2.                     Copyright Microsoft Corp. 1992-1996
  3.                         Remote Machine strout sample
  4.   FILE      :   remote.c
  5.   PURPOSE   :   The remote procedures that will be called from the client.
  6.   COMMENTS  :   These procedures will be linked into the server side of 
  7.                 the application.
  8. *************************************************************************/
  9. #include "strout.h"                 //Generated by the MIDL compiler   
  10. #include "common.h"                 //Common definitions for all files 
  11. /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  12. /*  Procedure   :   void GetRemoteEnv(unsigned long, str **)            */
  13. /*  Desc.       :   This procedure get the environment variables from   */
  14. /*                  the server and reuturns a pointer to an array of    */
  15. /*                  pointer to the environment strings                  */
  16. /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  17. void GetRemoteEnv(unsigned long *nNumLines, str **psEnvironmentBlock)
  18. {
  19.     int nIdx = 0;       // Loop counter                                 
  20.     TCHAR 
  21.         *pcTemp,        // Temporary pointer to the environment block   
  22.         *pcEnv;         // Pointer to the environment block             
  23.     // Get pointer to environment block
  24.     pcEnv = (TCHAR *) GetEnvironmentStrings();
  25.     // First count how many lines, must know how much memory to allocate
  26.     *nNumLines  = 0;            // Initialize number of lines to 0      
  27.     pcTemp = pcEnv;             // Set tempptr equal to envptr          
  28.     while (*pcTemp != NULL_CHAR)
  29.     {
  30.         // Don't count the lines that starts with IGNORE_CHAR         
  31.         if(*pcTemp != IGNORE_CHAR)
  32.         {
  33.             (*nNumLines)++;     // Increase the number of lines     
  34.         }
  35.         // Increment the string pointer. Each line ends in , and  
  36.         //  means end of block                                  
  37.         pcTemp += (_tcslen(pcTemp) + 1);
  38.     }
  39.     // Allocate the memory needed for the line pointer 
  40.     if(NULL == (*psEnvironmentBlock = (str *) 
  41.         midl_user_allocate((*nNumLines) * sizeof(str))))
  42.     {
  43.         _tprintf(TEXT("REMOTE.C : Memory allocation errorn"));
  44.         return;
  45.     }
  46.     // Iterate through all the environment strings, allocate memory,    
  47.     // and copy them                                                    
  48.     while (*pcEnv != NULL_CHAR)
  49.     {
  50.         // Don't count the lines that starts with IGNORE_CHAR
  51.         if(*pcEnv != IGNORE_CHAR)
  52.         {
  53.             // Allocate the space needed for the strings 
  54.             (*psEnvironmentBlock)[nIdx] = (str) midl_user_allocate(
  55.                 sizeof(TCHAR) * (_tcslen(pcEnv) + 1));
  56.             // Copy the environment string to the allocated memory
  57.             _tcscpy((*psEnvironmentBlock)[nIdx++], pcEnv);
  58.         }
  59.         
  60.         // Increment the string pointer. Each line ends in , and
  61.         //  means end of block
  62.         pcEnv += (_tcslen(pcEnv) + 1);
  63.     }
  64. }
  65. /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  66. /* Procedure    :   void ShutDown(void);                                */
  67. /* Desc.        :   This procedure send a message to the server that it */
  68. /*                  can stop listening for remote procedure calls       */
  69. /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  70. void ShutDown(void)
  71. {
  72.     RPC_STATUS nStatus;
  73.     // Tell the server to stop listening for remote procedure calls
  74.     _tprintf(TEXT("Shutting down the servern"));
  75.     nStatus = RpcMgmtStopServerListening(NULL);
  76.     EXIT_IF_FAIL(nStatus, "RpcMgmtStopServerListening");
  77. }