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 / data / repas / repassu.c < prev   
C/C++ Source or Header  |  1996-06-11  |  4KB  |  111 lines

  1. /****************************************************************************
  2.                    Microsoft RPC Version 2.0
  3.            Copyright Microsoft Corp. 1992, 1993, 1994- 1996
  4.                         repas Example
  5.  
  6.     FILE:       repasu.c
  7.  
  8.     PURPOSE:    Utility functions used by both client and server
  9.                 sides of the RPC distributed application.
  10.                 This sample demonstrates the transmit_as example.
  11.                 A doubly-linked list is transmitted over the network
  12.                 as a sized array.
  13.  
  14.     RELATED:    repass.c - server main
  15.                 repasp.c - remote procedures
  16.                 repasc.c - client main
  17.  
  18.     FUNCTIONS:  WCHAR_STRING_to_local    - convert WCHAR_STRING to CHAR_STRING
  19.                 WCHAR_STRING_from_local  - convert CHAR_STRING to WCHAR_STRING
  20.                 WCHAR_STRING_free_inst   - free CHAR_STRING memory
  21.                 WCHAR_STRING_free_local  - free WCHAR_STRING memory
  22.                 midl_user_allocate - user-supplied memory allocator
  23.                 midl_user_free - user-supplied routine to free memory
  24.  
  25.  
  26.     COMMENTS:   This sample program generates a client and server can share
  27.                 an interface, but one side can use a different representation
  28.                 than the other.
  29.  
  30.                 The client side in this example does all operations using
  31.                 character strings, and the server side does all operations
  32.                 using UNICODE strings.  Two procedures are provided, one
  33.                 defined with ASCII strings, one with UNICODE strings.
  34.                 The wire format reflects these definitions, yet the client
  35.                 and server see pure ASCII and pure UNICODE respectively.
  36.  
  37.                 The [represent_as] attribute (used in the client and server
  38.                 side acf files) requires the four user-supplied functions
  39.                 whose names start with the name of the transmitted type
  40.                 (in the client side's case: WCHAR_STRING)
  41.  
  42.                 The [in, out] attributes applied to remote procedure
  43.                 parameters require the two user-supplied functions
  44.                 midl_user_allocate and midl_user_free.
  45.  
  46.                 The other functions are utilities that are used to
  47.                 build or display the data structures.
  48.  
  49. ****************************************************************************/
  50.  
  51. #include <stdlib.h>
  52. #include <stdio.h>
  53. #include "repass.h"    // header file generated by MIDL compiler for client
  54.  
  55.  
  56.  
  57.  
  58. void __RPC_USER
  59. CHAR_STRING_from_local(
  60.     WCHAR_STRING __RPC_FAR * pLocal,
  61.     CHAR_STRING __RPC_FAR * __RPC_FAR * pWire )
  62. {
  63.     CHAR_STRING    *   pWireString;
  64.  
  65.     pWireString = midl_user_allocate( sizeof( CHAR_STRING ) );
  66.  
  67.     *pWire = pWireString;
  68.  
  69.     wcstombs( *pWireString, *pLocal, STRING_SIZE );
  70. }
  71.  
  72.  
  73. void __RPC_USER
  74. CHAR_STRING_to_local(
  75.     CHAR_STRING __RPC_FAR * pWire,
  76.     WCHAR_STRING __RPC_FAR * pLocal )
  77. {
  78.     mbstowcs( *pLocal, *pWire, STRING_SIZE );
  79. }
  80.  
  81. void __RPC_USER
  82. CHAR_STRING_free_inst(
  83.     CHAR_STRING __RPC_FAR * pWire)
  84. {
  85.     midl_user_free( pWire );
  86. }
  87.  
  88. void __RPC_USER
  89. CHAR_STRING_free_local(
  90.     WCHAR_STRING __RPC_FAR * pLocal)
  91. {
  92.     midl_user_free( pLocal );
  93. }
  94.  
  95. /***************************************************************************/
  96.  
  97. void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len)
  98. {
  99.     return(malloc(len));
  100. }
  101.  
  102. void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
  103. {
  104.     free(ptr);
  105. }
  106.  
  107.  
  108. /***************************************************************************/
  109.  
  110. /* end file repassu.c */
  111.