Класс 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;
}