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