Распределенные вычисления: технология Microsoft RPC. Часть1. Фертиков В.В. - 22 стр.

UptoLike

Составители: 

22
void main(void)
{
RpcServerUseProtseqEp(...);
RpcServerRegisterIf(...);
RpcServerListen(...);
}
RpcServerUseProtseqEp идентифицирует пункт назначения (endpoint)
сервера и последовательность сетевых протоколов. RpcServerRegisterIf ре-
гистрирует интерфейс, а RpcServerListen инструктирует сервер начать про-
слушивание запросов клиента.
Программа сервера должна также включить две функции, вызываемые
серверными стабами, midl_user_allocate и midl_user_free. Эти функции
распределяют и освобождают память на сервере при необходимости, когда уда-
ленная процедура должна передать параметры . В следующем примере,
midl_user_allocate и midl_user_free реализованы с использованием
библиотечных C-функций malloc и free:
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);
}
Полный код для HELLOS.C выглядит следующим образом :
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include "hello.h" // заголовок, сгенерированный
// компилятором MIDL
void Usage(char * pszProgramName)
{ fprintf(stderr, "%s", PURPOSE);
fprintf(stderr, "Usage: %s\n", pszProgramName);
fprintf(stderr, " -p protocol_sequence\n");
fprintf(stderr, " -e endpoint\n");
fprintf(stderr, " -m maxcalls\n");
fprintf(stderr, " -n mincalls\n");
fprintf(stderr, " -f flag_wait_op\n");
exit(1);
}
                                    22
void main(void)
{
    RpcServerUseProtseqEp(...);
    RpcServerRegisterIf(...);
    RpcServerListen(...);
}

    RpcServerUseProtseqEp идентифицирует пункт назначения (endpoint)
сервера и последовательность сетевых протоколов. RpcServerRegisterIf ре-
гистрирует интерфейс, а RpcServerListen инструктирует сервер начать про-
слушивание запросов клиента.
    Программа сервера должна также включить две функции, вызываемые
серверными стабами, midl_user_allocate и midl_user_free . Эти функции
распределяют и освобождают память на сервере при необходимости, когда уда-
ленная процедура должна передать параметры. В следующем примере,
midl_user_allocate и midl_user_free реализованы с использованием
библиотечных C-функций malloc и free:

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);
}

    Полный код для HELLOS.C выглядит следующим образом:

#include 
#include 
#include 
#include "hello.h" // заголовок, сгенерированный
                   // компилятором MIDL
void Usage(char * pszProgramName)
{   fprintf(stderr, "%s", PURPOSE);
    fprintf(stderr, "Usage: %s\n", pszProgramName);
    fprintf(stderr, " -p protocol_sequence\n");
    fprintf(stderr, " -e endpoint\n");
    fprintf(stderr, " -m maxcalls\n");
    fprintf(stderr, " -n mincalls\n");
    fprintf(stderr, " -f flag_wait_op\n");
    exit(1);
}