ВУЗ:
Составители:
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)); }
Страницы
- « первая
- ‹ предыдущая
- …
- 12
- 13
- 14
- 15
- 16
- …
- следующая ›
- последняя »