Транспортный код на языке C++
Перед чтением этого раздела, нужно ознакомиться со сведениями о механизме IPC и формальных спецификациях компонентов решения.
Чтобы реализовать взаимодействие процессов, необходим транспортный код, отвечающий за формирование, отправку, прием и обработку IPC-сообщений.
Транспортный код
Транспортный код включает прокси-объекты (proxy) и стабы (stub) для использования как клиентом, так и сервером. Прокси-объекты используются клиентом для упаковки параметров вызываемого метода в IPC-запрос, выполнения IPC-запроса и распаковки IPC-ответа. Стабы используются сервером для распаковки параметров из IPC-запроса, диспетчеризации вызова на соответствующую реализацию метода и упаковки IPC-ответа.
Генерация транспортного кода для разработки на C++
У разработчика решения нет необходимости самостоятельно писать транспортный код. В составе KasperskyOS Community Edition SDK поставляется генератор транспортного кода. Этот генератор создает транспортный код из формальных спецификаций компонентов решения.
Чтобы генерировать транспортный код на языке C++ при сборке решения, нужно использовать CMake-команды add_nk_idl (), add_nk_cdl (), add_nk_edl ().
Типы С++ в файле *.idl.cpp.h
Каждый интерфейс определяется в IDL-описании. Это описание задает имя интерфейса, сигнатуры интерфейсных методов и типы данных для параметров интерфейсных методов.
CMake-команда add_nk_idl () создает CMake-цель для генерации заголовочных файлов для заданного IDL-файла. Генерируемые заголовочные файлы содержат представление на языке C++ для интерфейса и типов данных, описанных в IDL-файле, а также методы, необходимые для использования прокси-объектов и стабов.
Соответствие типов данных, объявленных в IDL-файле, типам C++ приведено в таблице ниже.
Соответствие типов IDL типам C++
Тип IDL | Тип C++ |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Работа с транспортным кодом на C++
Сценарии разработки клиента и сервера, которые обмениваются IPC-сообщениями, представлены в разделе "Динамическое создание IPC-каналов при разработке на языке C++".