Control\IControlSystemServerSide::Marshal

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
Компоненты на верхнем уровне \ Подсистема управления \ Реализация \ IControlSystemServerSide \ Marshal
package<default_package_allocator, IControlSystemDomainSide> Marshal() const;
package_reference<IControlSystemDomainSide> Marshal(void* pBuffer, size_type cbBuffer) const;

Подготовка (упаковка) ссылки на подсистему управления к ее передаче экземпляру подсистемы предметной области или иным компонентам системы моделирования.

  1. Выделяет память под хранение запакованных данных, которые управляются запаковщиком package.
  2. Записывает запакованные данные в предоставленный извне буфер.
Параметры
[in]pBufferУказатель на буфер памяти, байтовым размером, как минимум, равным значению, возвращаемому методом MarshalSize. Функция заполняет буфер запакованной геометрической моделью.
cbBufferБайтовый размер предоставленного для второй перегрузки буфера данных.
Возвращаемое значение:
Объект, управляющий запакованным пакетом данных. Первая перегрузка, в отличие от второй, возвращает объект, также управляющий буфером, хранящим запакованные данные, и автоматически освобождает память при деструкции возвращенного объекта. Вторая перегрузка управляет только данными, но ответственность за освобождения памяти буфера ложится на вызывающего.
Перегрузка 1 за раз создает смарт объект C++ (см. package), который управляет как запаковкой, так и выделенной им же памятью. Перегрузка 2 позволяет использовать уже существующую память, которая заполняется запакованной геометрической моделью среды моделируемого поля. В обоих случаях полученный пакет данных полностью описывает геометрическую модель и может быть передан удаленным узлам. Вторая перегрузка предполагает, что размер предоставленного буфера задан в байтах параметром cbBuffer. Этот размер должен быть не меньше значения, возвращаемого методом MarshalSize. Методы фактически делегируют вызов запаковщику package, на вход которого можно предоставлять геометрическую модель напрямую, без вызова методов.
Возможные исключения
Chusov::Exceptions::OutOfMemoryExceptionИсключение, которое может быть сгенерировано перегрузкой 1 в случае нехватки памяти.
Chusov::Exceptions::InsufficientBufferExceptionИсключение, которое может быть сгенерировано перегрузкой 2 в случае, если предоставлен слишком малый буфер pBuffer.
См. также
package_reference
package
make_packageФункция, позволяющая создание запакованных объектов на основе их типов, полученных дедукцией и с использованием стандартного менеджера памяти std::allocator.