Поделиться через


Класс marshal_context

Этот класс преобразует данные между собственными и управляемыми средами.

Синтаксис

class marshal_context

Замечания

marshal_context Используйте класс для преобразований данных, требующих контекста. Дополнительные сведения о том, какие преобразования требуют контекста и какой файл маршалинга необходимо включить, см. в разделе "Обзор маршалинга в C++". Результат маршалинга при использовании контекста действителен только до тех пор, пока объект не marshal_context будет уничтожен. Чтобы сохранить результат, необходимо скопировать данные.

То же marshal_context самое можно использовать для многочисленных преобразований данных. Повторное использование контекста таким образом не повлияет на результаты предыдущих вызовов маршалинга.

Участники

Открытые конструкторы

Имя Описание
marshal_context::marshal_context marshal_context Создает объект для преобразования данных между управляемыми и собственными типами данных.
marshal_context::~marshal_context Уничтожает объект marshal_context .

Открытые методы

Имя Описание
marshal_context::marshal_as Выполняет маршалинг для определенного объекта данных, чтобы преобразовать его между управляемым и собственным типом данных.

Требования

Файл заголовка:<msclr\marshal.h, <msclr\marshal_windows.h>>, <msclr\marshal_cppstd.h> или <msclr\marshal_atl.h>

Пространство имен: msclr::interop

marshal_context::marshal_context

marshal_context Создает объект для преобразования данных между управляемыми и собственными типами данных.

marshal_context();

Замечания

Для некоторых преобразований данных требуется контекст маршала. Дополнительные сведения о том, какие переводы требуют контекста и какой файл маршалинга необходимо включить в приложение, см. в разделе "Обзор маршалинга в C++".

Пример

См. пример marshal_context::marshal_as.

marshal_context::~marshal_context

Уничтожает объект marshal_context .

~marshal_context();

Замечания

Для некоторых преобразований данных требуется контекст маршала. Общие сведения о маршалинге в C++ см. в разделе "Дополнительные сведения о том, какие переводы требуют контекста и какой файл маршалинга необходимо включить в приложение".

Удаление marshal_context объекта приведет к недопустимости данных, преобразованных этим контекстом. Если вы хотите сохранить данные после marshal_context уничтожения объекта, необходимо вручную скопировать данные в переменную, которая будет сохранена.

marshal_context::marshal_as

Выполняет маршалинг для определенного объекта данных, чтобы преобразовать его между управляемым и собственным типом данных.

To_Type marshal_as<To_Type>(
   From_Type input
);

Параметры

input
[in] Значение, которое требуется маршалировать в переменную To_Type .

Возвращаемое значение

Переменная типа To_Type , которая является преобразованным значением input.

Замечания

Эта функция выполняет маршалинг для определенного объекта данных. Используйте эту функцию только с преобразованиями, указанными в таблице в обзоре маршалинга в C++.

При попытке маршалировать пару типов данных, которые не поддерживаются, marshal_as при компиляции будет возникать ошибка C4996 . Дополнительные сведения см. в сообщении, предоставленном этой ошибкой. Ошибка C4996 может быть создана для нескольких нерекомендуемых функций. Два условия, создающие эту ошибку, пытаются маршалировать пару типов данных, которые не поддерживаются и пытаются использовать marshal_as для преобразования, требующего контекста.

Библиотека маршалинга состоит из нескольких файлов заголовков. Для любого преобразования требуется только один файл, но можно включить дополнительные файлы, если требуется для других преобразований. Таблица в Marshaling Overview in C++ таблице указывает, какой маршалинг файл должен быть включен для каждого преобразования.

Пример

В этом примере создается контекст для маршалинга из System::String типа переменной const char * . Преобразованные данные не будут допустимыми после строки, которая удаляет контекст.

// marshal_context_test.cpp
// compile with: /clr
#include <stdlib.h>
#include <string.h>
#include <msclr\marshal.h>

using namespace System;
using namespace msclr::interop;

int main() {
   marshal_context^ context = gcnew marshal_context();
   String^ message = gcnew String("Test String to Marshal");
   const char* result;
   result = context->marshal_as<const char*>( message );
   delete context;
   return 0;
}