DYNOUTS.C
/******************************************************************************\ 
*       This is a part of the Microsoft Source Code Samples. 
*       Copyright 1995 - 1998 Microsoft Corporation. 
*       All rights reserved. 
*       This source code is only intended as a supplement to 
*       Microsoft Development Tools and/or WinHelp documentation. 
*       See these sources for detailed information regarding the 
*       Microsoft samples programs. 
\******************************************************************************/ 
// 
// Copyright 1996 - 1998 Microsoft Corporation.  All Rights Reserved. 
// 
// 
// Sample code to show server-side 
// memory allocation for an [out] parameter 
// 
// 
 
#include <stdio.h> 
#include <assert.h> 
#include <malloc.h> 
#include "dynout.h" 
 
#ifdef NODEBUG 
#define CHECK_STATUS(x) 
#define TRACE(s) 
#else 
#define CHECK_STATUS(x){if (x!=RPC_S_OK) { printf("RPC Err: %d\nfile = %s, line=%d.",x,__FILE__,__LINE__); exit(x);}} 
#define TRACE(s)puts(s) 
#endif 
 
void main(int argc,char **argv) 
{ 
RPC_STATUSrpcStatus; 
RPC_BINDING_VECTOR  *vectBinding; 
unsigned char *szEntryName; 
 
TRACE("RpcServerRegisterIf"); 
rpcStatus=RpcServerRegisterIf(MemStuff_v1_0_s_ifspec,0,0); 
CHECK_STATUS(rpcStatus); 
 
TRACE("RpcServerUseAllProtseqs"); 
rpcStatus=RpcServerUseAllProtseqs(RPC_C_PROTSEQ_MAX_REQS_DEFAULT,NULL); 
CHECK_STATUS(rpcStatus); 
 
TRACE("RpcServerInqBindings"); 
rpcStatus=RpcServerInqBindings(&vectBinding); 
CHECK_STATUS(rpcStatus); 
 
TRACE("RpcNsBindingExport"); 
szEntryName="/.:/MyServer"; 
rpcStatus=RpcNsBindingExport(RPC_C_NS_SYNTAX_DEFAULT,szEntryName,MemStuff_v1_0_s_ifspec,vectBinding,NULL); 
CHECK_STATUS(rpcStatus); 
 
TRACE("RpcEpRegister"); 
rpcStatus=RpcEpRegister(MemStuff_v1_0_s_ifspec, 
vectBinding, 
NULL,NULL); 
CHECK_STATUS(rpcStatus); 
 
TRACE("RpcBindingVectorFree"); 
rpcStatus=RpcBindingVectorFree(&vectBinding); 
CHECK_STATUS(rpcStatus); 
 
puts("\n\n"); 
puts("(C) Microsoft New Zealand Limited. Written by Michael Howard, " __DATE__); 
puts("\nListening...."); 
 
rpcStatus=RpcServerListen(1,RPC_C_LISTEN_MAX_CALLS_DEFAULT,FALSE); 
CHECK_STATUS(rpcStatus); 
} 
 
void  __RPC_FAR * __RPC_API midl_user_allocate(size_t len) 
{ 
    return malloc(len); 
} 
 
void __RPC_API midl_user_free(void __RPC_FAR * ptr) 
{ 
    free(ptr); 
}