Маршалинг – что это такое и зачем он нужен?
что такое маршаллинг и зачем он нам нужен?
мне трудно поверить, что я не могу отправить int по проводу от C# до C и должны Маршалл его. Почему C# не может просто отправить 32 бита с начальным и конечным сигналом, сообщая c-коду, что он получил int?
если есть какие-либо хорошие учебники или сайты о том, почему нам нужно маршалинг и как его использовать, это было бы здорово.
5 ответов:
потому что разные языки и среды имеют разные соглашения о вызовах, разные соглашения о макете, разные размеры примитивов (см.
charв C# иcharв C), различные соглашения о создании/уничтожении объектов и различные руководящие принципы проектирования. Вам нужен способ получить материал из управляемой земли в то место, где неуправляемая Земля может видеть и понимать его, и наоборот. Вот для чего нужен маршаллинг.
.NET-код(C#, VB) называется "управляемым", потому что он" управляется " средой CLR ( Общеязыковая Среда Выполнения)
Если вы пишете код на C или C++ или ассемблере, все это называется "неуправляемым", поскольку CLR не участвует. Вы несете ответственность за все выделение/удаление памяти.
маршалинг процесс между управляемым и неуправляемым кодом; это одна из самых важных услуг, предоставляемых CLR.
упорядочить элемент
intв идеале именно то, что вы сказали: копирование памяти из управляемого стека CLR в какое-то место, где код C может его видеть. Упорядочивание строк, объектов, массивов и других типов-это сложные вещи.но уровень взаимодействия P/Invoke заботится почти обо всех этих вещах для вас.
Как говорит Винко в комментариях, вы можете передавать примитивные типы без какой-либо специальной сортировки. Это называется "преобразуемых" типы и включать типы, такие как байт, короткие, тип int, долго, и т. д. и их беззнаковые аналоги.
эта страница содержит список blittable и не-blittable типы.
маршаллинг является "средой" за неимением лучшего слова или шлюза, чтобы общаться с типами данных неуправляемого мира и наоборот, используя pinvoke, и гарантирует, что данные возвращаются обратно безопасным способом.
Comments