Объявление асинхронных функций
Чтобы объявить функцию RPC как асинхронную, сначала объявите функцию как часть определения интерфейса в файле языка определения интерфейса (IDL). Использование асинхронных функций RPC не требует каких-либо особых изменений в IDL-файле. В следующем примере показан IDL-файл для приложения, использующего одну асинхронную функцию.
[
uuid (7f6c4340-eb67-11d1-b9d7-00c04fad9a3b),
version(1.0),
pointer_default(unique)
]
interface AsyncRPC
{
const long DEFAULT_ASYNC_DELAY = 10000;
const short APP_ERROR = -1;
const char* DEFAULT_PROTOCOL_SEQUENCE = "ncacn_ip_tcp";
const char* DEFAULT_ENDPOINT = "8765";
void NonAsyncFunc(handle_t hBinding,
[in, string] unsigned char * pszMessage);
void AsyncFunc(handle_t hBinding,
[in] unsigned long nAsychDelay);
void Shutdown(handle_t hBinding);
}
Для всех асинхронных функций RPC, которые использует приложение, необходимо изменить объявление асинхронных функций в файле ACF приложения. Примените атрибут [async] к каждому имени асинхронной функции, как показано в следующем примере:
interface AsyncRPC
{
[async] AsyncFunc();
}
При применении атрибута [async] в файле ACF компилятор MIDL автоматически создает дополнительный параметр асинхронного дескриптора в коде заглушки.