Маршалинг – что это такое и зачем он нужен?



что такое маршаллинг и зачем он нам нужен?



мне трудно поверить, что я не могу отправить int по проводу от C# до C и должны Маршалл его. Почему C# не может просто отправить 32 бита с начальным и конечным сигналом, сообщая c-коду, что он получил int?



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

712   5  

5 ответов:

потому что разные языки и среды имеют разные соглашения о вызовах, разные соглашения о макете, разные размеры примитивов (см. char в C# и char в C), различные соглашения о создании/уничтожении объектов и различные руководящие принципы проектирования. Вам нужен способ получить материал из управляемой земли в то место, где неуправляемая Земля может видеть и понимать его, и наоборот. Вот для чего нужен маршаллинг.

.NET-код(C#, VB) называется "управляемым", потому что он" управляется " средой CLR ( Общеязыковая Среда Выполнения)

Если вы пишете код на C или C++ или ассемблере, все это называется "неуправляемым", поскольку CLR не участвует. Вы несете ответственность за все выделение/удаление памяти.

маршалинг процесс между управляемым и неуправляемым кодом; это одна из самых важных услуг, предоставляемых CLR.

упорядочить элемент int в идеале именно то, что вы сказали: копирование памяти из управляемого стека CLR в какое-то место, где код C может его видеть. Упорядочивание строк, объектов, массивов и других типов-это сложные вещи.

но уровень взаимодействия P/Invoke заботится почти обо всех этих вещах для вас.

Как говорит Винко в комментариях, вы можете передавать примитивные типы без какой-либо специальной сортировки. Это называется "преобразуемых" типы и включать типы, такие как байт, короткие, тип int, долго, и т. д. и их беззнаковые аналоги.

эта страница содержит список blittable и не-blittable типы.

маршаллинг является "средой" за неимением лучшего слова или шлюза, чтобы общаться с типами данных неуправляемого мира и наоборот, используя pinvoke, и гарантирует, что данные возвращаются обратно безопасным способом.

Comments

    Ничего не найдено.