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

UptoLike

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

14
file), который обрабатывается компилятором MIDL вместе с IDL файлом . ACF
содержит данные и атрибуты RPC, не имеющие отношения к передаваемым
данным . Например, объект данных, называемый дескриптором связывания,
представляет соединение между приложениями клиента и сервера. Клиент вы -
зывает функции времени выполнения, чтобы установить имеющий силу деск -
риптор связывания, который может затем использоваться функциями времени
выполнения всякий раз , когда клиент вызывает удаленную процедуру . Деск -
риптор связывания не является частью функционального прототипа и не пере-
дается через сеть, поэтому он определяется в ACF.
ACF для программы "Hello,world" имеет следующий вид :
/* файл: hello.acf */
[ implicit_handle(handle_t hello_IfHandle)
]interface hello
{
}
Формат ACF подобен формату IDL файла. Атрибуты приводятся в квад -
ратных скобках со следующим за ними ключевым словом interface и именем
интерфейса. Имя интерфейса, определенное в ACF, должно соответствовать
имени, определенному в IDL файле. ACF содержит атрибут
implicit_handle, указывающий , что дескриптор глобальная переменная ,
т.е. доступная функциям библиотеки времени выполнения. Ключевое слово
implicit_handle связано с типом дескриптора и именем дескриптора; в этом
примере дескриптор имеет MIDL тип данных handle_t. Имя
hello_IfHandle дескриптора, специфицированное в ACF, определено в сге-
нерированном файле заголовка HELLO.H. Этот дескриптор будет использо-
ваться при вызовах функций клиентской библиотеки времени выполнения.
Функции, вызываемые из RPC
Библиотеки времени выполнения RPC часто вызывают функции, реализо-
ванные пользователем . Этот подход позволяет компилятору MIDL генериро-
вать C код автоматически, в то же время сохраняя возможность непосредствен-
ного управления выполнением операции в приложении. Такие реализованные
пользователем функции могут иметь либо фиксированные имена, либо имена,
основанные на атрибутах или типах данных IDL-файла. Например , всякий раз ,
когда библиотеки времени выполнения распределяют или освобождают память,
они вызывают реализованные пользователем функции midl_user_allocate и
midl_user_free. В примере "Привет, мир" приложение не нуждается в слож -
ном управлении памятью , так что эти функции просто реализованы в терминах
библиотечных C-функций malloc и free:
void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len)
{ return(malloc(len));
}
                                    14
file), который обрабатывается компилятором MIDL вместе с IDL файлом. ACF
содержит данные и атрибуты RPC, не имеющие отношения к передаваемым
данным. Например, объект данных, называемый дескриптором связывания,
представляет соединение между приложениями клиента и сервера. Клиент вы-
зывает функции времени выполнения, чтобы установить имеющий силу деск-
риптор связывания, который может затем использоваться функциями времени
выполнения всякий раз, когда клиент вызывает удаленную процедуру. Деск-
риптор связывания не является частью функционального прототипа и не пере-
дается через сеть, поэтому он определяется в ACF.
      ACF для программы "Hello,world " имеет следующий вид:

/* файл: hello.acf */

[ implicit_handle(handle_t hello_IfHandle)
]interface hello
{
}

     Формат ACF подобен формату IDL файла. Атрибуты приводятся в квад-
ратных скобках со следующим за ними ключевым словом interface и именем
интерфейса. Имя интерфейса, определенное в ACF, должно соответствовать
имени,    определенному    в   IDL    файле.   ACF    содержит   атрибут
implicit_handle , указывающий, что дескриптор – глобальная переменная,
т.е. доступная функциям библиотеки времени выполнения. Ключевое слово
implicit_handle связано с типом дескриптора и именем дескриптора; в этом
примере дескриптор имеет MIDL тип данных handle_t. Имя
hello_IfHandle дескриптора, специфицированное в ACF, определено в сге-
нерированном файле заголовка HELLO.H. Этот дескриптор будет использо-
ваться при вызовах функций клиентской библиотеки времени выполнения.

     Функции, вызываемые из RPC
     Библиотеки времени выполнения RPC часто вызывают функции, реализо-
ванные пользователем. Этот подход позволяет компилятору MIDL генериро-
вать C код автоматически, в то же время сохраняя возможность непосредствен-
ного управления выполнением операции в приложении. Такие реализованные
пользователем функции могут иметь либо фиксированные имена, либо имена,
основанные на атрибутах или типах данных IDL-файла. Например, всякий раз,
когда библиотеки времени выполнения распределяют или освобождают память,
они вызывают реализованные пользователем функции midl_user_allocate и
midl_user_free . В примере "Привет, мир" приложение не нуждается в слож-
ном управлении памятью, так что эти функции просто реализованы в терминах
библиотечных C-функций malloc и free:

void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len)
{   return(malloc(len));
}