Я понимаю, что маршалинг заключается в том, что он позволяет вам согласованно передавать данные в различных операционных средах.
В контексте маршалинга данных из управляемого в неуправляемый код это более или менее одинаково.
У меня есть некоторые данные, скажем, массив целых чисел или любой другой тип данных по моему выбору, и я хочу сделать их доступными для использования в моем коде C # после того, как мой код C ++ выполнит некоторые операции с ним.
Я не могу просто сказать «Эй, вот где находится массив, делай, что хочешь» для кода C #. Массив int в C ++ не может храниться так же, как в C #. Маршалинг позволяет нам передавать эти данные независимо от среды, чтобы любая из сторон видела данные одинаково точно.
Еще один пример - сеть. Обычно вы не называете это маршалингом, но если вы хотите передать его по сети, вы обычно должны передавать его таким образом, чтобы тот, кто его получает, интерпретировал данные так же, как вы. Ваш компьютер может представлять данные в порядке с прямым порядком байтов, а другой может представлять их в порядке с прямым порядком байтов.
tl; dr: Marshaling предоставляет вам способ для последовательного представления данных в различных операционных средах