This page is in Pre Alpha. That means no grammer checks, no editting and speeling mistakes galore! The explanations and the final version will come soon . Check it out at your own risk! proxy.c #include "rpcproxy.h" #include "iface.h" #include void abc(char *p){FILE *fp=fopen("c:\\insidecom\\chap10\\z.txt","a+");fprintf(fp,"%s\n",p);fclose(fp);} typedef struct _MIDL_TYPE_FORMAT_STRING { short Pad; unsigned char Format[5]; } MIDL_TYPE_FORMAT_STRING; static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString = {0,{0x11, 0x8,0x8,0x5c,0x0}}; static const MIDL_STUB_DESC Object_StubDesc = { 0,NdrOleAllocate,NdrOleFree,0,0,0,0,0, __MIDL_TypeFormatString.Format, 0,0x10001,0,0x300002c,0,0,0,0,0,0,0}; HRESULT STDMETHODCALLTYPE IX_Count_Proxy(IX __RPC_FAR *This,long __RPC_FAR *sizeArray) { HRESULT _RetVal; RPC_MESSAGE _RpcMessage; MIDL_STUB_MESSAGE _StubMsg; abc("1"); NdrProxyInitialize((void __RPC_FAR * )This,( PRPC_MESSAGE )&_RpcMessage, ( PMIDL_STUB_MESSAGE )&_StubMsg,( PMIDL_STUB_DESC )&Object_StubDesc,3); _StubMsg.BufferLength = 4U; NdrProxyGetBuffer(This, &_StubMsg); *(( long __RPC_FAR * )_StubMsg.Buffer)++ = *sizeArray; NdrProxySendReceive(This, &_StubMsg); *sizeArray = *(( long __RPC_FAR * )_StubMsg.Buffer)++; _RetVal = *(( HRESULT __RPC_FAR * )_StubMsg.Buffer)++; return _RetVal; } void __RPC_STUB IX_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase) { HRESULT _RetVal; MIDL_STUB_MESSAGE _StubMsg; long __RPC_FAR *sizeArray; abc("2"); NdrStubInitialize(_pRpcMessage,&_StubMsg,&Object_StubDesc,_pRpcChannelBuffer); sizeArray = 0; sizeArray = ( long __RPC_FAR * )_StubMsg.Buffer; _StubMsg.Buffer += sizeof( long ); *_pdwStubPhase = STUB_CALL_SERVER; _RetVal = (((IX *) ((CStdStubBuffer *)This)->pvServerObject)->lpVtbl) -> Count((IX *) ((CStdStubBuffer *)This)->pvServerObject,sizeArray); *_pdwStubPhase = STUB_MARSHAL; _StubMsg.BufferLength = 4U + 4U; NdrStubGetBuffer(This, _pRpcChannelBuffer, &_StubMsg); *(( long __RPC_FAR * )_StubMsg.Buffer)++ = *sizeArray; *(( HRESULT __RPC_FAR * )_StubMsg.Buffer)++ = _RetVal; _pRpcMessage->BufferLength = (unsigned int)((long)_StubMsg.Buffer - (long)_pRpcMessage->Buffer); } const CINTERFACE_PROXY_VTABLE(4) _IXProxyVtbl = { &IID_IX,IUnknown_QueryInterface_Proxy,IUnknown_AddRef_Proxy, IUnknown_Release_Proxy ,IX_Count_Proxy}; static const PRPC_STUB_FUNCTION IX_table[] ={IX_Count_Stub}; const CInterfaceStubVtbl _IXStubVtbl={&IID_IX,0,4,&IX_table[-3],CStdStubBuffer_METHODS}; const CInterfaceProxyVtbl * _server_ProxyVtblList[] = { ( CInterfaceProxyVtbl *) &_IXProxyVtbl,0}; const CInterfaceStubVtbl * _server_StubVtblList[] = { ( CInterfaceStubVtbl *) &_IXStubVtbl,0}; PCInterfaceName const _server_InterfaceNamesList[] = {"IX",0}; const ExtendedProxyFileInfo server_ProxyFileInfo = { (PCInterfaceProxyVtblList *) & _server_ProxyVtblList, (PCInterfaceStubVtblList *) & _server_StubVtblList, (const PCInterfaceName * ) & _server_InterfaceNamesList, 0,0,1,1};