home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / netds / rpc / dynout / dynoutc.c < prev    next >
C/C++ Source or Header  |  1997-10-05  |  2KB  |  71 lines

  1.  
  2. /******************************************************************************\
  3. *       This is a part of the Microsoft Source Code Samples.
  4. *       Copyright (C) 1995-1997 Microsoft Corporation.
  5. *       All rights reserved.
  6. *       This source code is only intended as a supplement to
  7. *       Microsoft Development Tools and/or WinHelp documentation.
  8. *       See these sources for detailed information regarding the
  9. *       Microsoft samples programs.
  10. \******************************************************************************/
  11. //
  12. // Sample code to show server-side
  13. // memory allocation for an [out] parameter
  14. //
  15. //
  16. #include <stdio.h>
  17. #include <conio.h>
  18. #include <stdlib.h>
  19. #include <assert.h>
  20. #include <malloc.h>
  21. #include "dynout.h"
  22.  
  23. void main(int argc,char **argv)
  24. {
  25.     unsigned char *pr = NULL;
  26.     long lSize;
  27.     int i;
  28.     int bOK;
  29.  
  30.     RpcTryExcept
  31.     {
  32.         for(;;)
  33.         {
  34.             pr = NULL;    // This is *REALLY* important!
  35.  
  36.             GrabChunk(&lSize,&pr);
  37.     
  38.             // quick sanity check
  39.             for (i=0, bOK=TRUE; (i < lSize) && bOK; i++)
  40.             {
  41.                 if (*pr != pr[i])
  42.                 {
  43.                     puts("***Error***");
  44.                     bOK=FALSE;
  45.                     break;
  46.                 }
  47.             }
  48.  
  49.             printf("Returned %d bytes of '%c'\n",lSize,*pr);
  50.             
  51.             midl_user_free(pr);
  52.         }
  53.     }
  54.     RpcExcept(1)
  55.     {
  56.         printf("Err: %u\n",RpcExceptionCode());
  57.     }
  58.     RpcEndExcept
  59. }
  60.  
  61. void  __RPC_FAR * __RPC_API midl_user_allocate(size_t len)
  62. {
  63.     return malloc(len);
  64. }
  65.  
  66. void __RPC_API midl_user_free(void __RPC_FAR * ptr)
  67. {
  68.  
  69.     free(ptr);
  70. }
  71.