Именованные каналы для двунаправленного межпроцессного обмена нетипизированными данными между двумя Windows-машинами, страница 7

Определяет защищённые либо отслеживаемые выражения на предмет исключений во время выполнения.

expression

Определяет выражения, которые выполняются при появлении исключения. Если выполнение expression даёт ненулевой результат, то выполняются все выражения обработчика исключения. При нулевом результате выполнения expression, раскрутка продолжает переход к следующему обработчику RpcTryExceptили RpcTryFinally.

exception statements

определяет выражения, которые выполняются в случае ненулевого результата выполнения expression.

#include <vcl.h>

#pragma hdrstop

#include "mrpc.h"

#include <windows.h>

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

HANDLE thr;

void MyFunc(str szString,unsigned long Count)

{

   for(ULONG i=0;i<Count;i++)

   MessageBox(NULL,(LPCSTR)szString,"Rpc Server Test",MB_OK);

}

void __fastcall routine(void *pParams)

{

if(RpcServerListen(1,RPC_C_LISTEN_MAX_CALLS_DEFAULT,FALSE))

{

       MessageBox(NULL,"Error listen","ERROR",MB_OK);

       return;

}

return;

}

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

}

//---------------------------------------------------------------------------

BOOL First;

void __fastcall TForm1::Button1Click(TObject *Sender)

{

if(First)

       {

                      First=FALSE;

                      if(RpcServerUseProtseqEp((UCHAR*)"ncacn_np",

                                                                                                       RPC_C_PROTSEQ_MAX_REQS_DEFAULT,

                                                                                                               (UCHAR*)"\\pipe\\simple",

                                                                                                               NULL))

                      {

                                     MessageBox(NULL,"Error registering ptotocol","ERROR",MB_OK);

                                     return;

                      }

       }

       if(RpcServerRegisterIf(rpc_v1_0_s_ifspec,

                      NULL,NULL))

       {

                      MessageBox(NULL,"Error registering interface","ERROR",MB_OK);

                      return;

       }

thr=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)routine,NULL,0,NULL);

}

//---------------------------------------------------------------------------

4.Создание клиента (настройки те же)

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "mrpc.h"

#include <windows.h>

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

const char *m_String="SomeThing of Me";

unsigned int m_Count;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

char * pszStringBinding=NULL;

if(RpcStringBindingCompose(NULL,

   (UCHAR*)"ncacn_np",

   (UCHAR*)"\\\\johnxp",

   (UCHAR*)"\\pipe\\simple",

   NULL,

   (UCHAR**)&pszStringBinding))

{

   MessageBox(NULL,"Error binding compose","ERROR",MB_OK);

       return;

}

if(RpcBindingFromStringBinding((UCHAR*)pszStringBinding,&global_rpc_handle))

{

  MessageBox(NULL,"Error binding call","ERROR",MB_OK);

  return;

}

 char *tmp_str=strdup(m_String);

  RpcTryExcept

  {

         MyFunc((UCHAR *)tmp_str,m_Count);

  }

  RpcExcept(1)

  {

         MessageBox(NULL,"Error call MyFunc","ERROR",MB_OK);

  }

  RpcEndExcept

  m_String=tmp_str;

  m_Count+=1;

       return;

}

//---------------------------------------------------------------------------