Маршалинг - что это и зачем нам это нужно?
Что такое сортировка и зачем она нам нужна?
Мне трудно поверить, что я не могу отправить int
по проводнику с С# на C и должен его обработать. Почему С# просто не посылает 32 бита с сигналом запуска и завершения, говоря C-код, что он получил int
?
Если есть хорошие учебники или сайты о том, зачем нам нужно сортировать и как использовать его, это было бы здорово.
Ответы
Ответ 1
Поскольку разные языки и среды имеют разные соглашения о вызовах, разные соглашения о компоновке, разные размеры примитивов (см. char
в С# и char
в C), различные соглашения о создании/уничтожении объектов и различные руководящие принципы проектирования. Вам нужен способ вытащить материал из управляемой земли в место, где неуправляемая земля может ее видеть и понимать, и наоборот. Это то, что нужно для сортировки.
Ответ 2
.NET-код (С#, VB) называется "управляемым", потому что он "управляется" с помощью CLR (Common Language Runtime)
Если вы пишете код на C или С++ или ассемблере, все они называются "неуправляемыми", поскольку CLR не задействован. Вы несете ответственность за все выделение/выделение памяти.
Маршалинг - это процесс между управляемым кодом и неуправляемым кодом; Это одна из самых важных услуг, предлагаемых CLR.
Ответ 3
Маршаллинг int
в идеале - это то, что вы сказали: копирование памяти из управляемого стека CLR в место, где C-код может его увидеть. Массирование строк, объектов, массивов и других типов - это трудные вещи.
Но слой взаимодействия P/Invoke берет на себя почти все эти вещи для вас.
Ответ 4
Как говорит Винко в комментариях, вы можете передавать примитивные типы без какой-либо специальной сортировки. Они называются "blittable" типами и включают в себя такие типы, как byte, short, int, long и т.д. И их неподписанные аналоги.
Эта страница содержит список типов Blittable и Non-Blittable.
Ответ 5
Маршаллинг - это "среда" из-за отсутствия лучшего слова или шлюза, для связи с неуправляемыми мировыми типами данных и наоборот, с использованием pinvoke и обеспечения возврата данных в безопасном режиме.
Ответ 6
Marshalling передает сигнатуру функции другому процессу, который находится на другой машине, и это обычно реализуется путем преобразования структурированных данных в специальный формат, который может быть перенесен в другие процессорные системы (сериализация/десериализация)