Маршалинг - что это и зачем нам это нужно? - PullRequest
84 голосов
/ 11 февраля 2010

Что такое сортировка и зачем она нам нужна?

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

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

Ответы [ 6 ]

68 голосов
/ 11 февраля 2010

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

17 голосов
/ 07 апреля 2016

.NET-код (C #, VB) называется «управляемым», поскольку он «управляется» CLR ( Common Language Runtime )

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

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

10 голосов
/ 11 февраля 2010

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

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

6 голосов
/ 11 февраля 2010

Как говорит Винко в комментариях, вы можете передавать примитивные типы без какой-либо специальной сортировки. Они называются «blittable» типами и включают в себя такие типы, как byte, short, int, long и т. Д. И их неподписанные аналоги.

Эта страница содержит список типов blittable и non-blittable .

4 голосов
/ 11 февраля 2010

Marshalling - это «среда» для поиска более подходящего слова или шлюза, для связи с типами данных неуправляемого мира и наоборот, используя пинвоук, и гарантирует, что данные возвращаются безопасным способом.

1 голос
/ 05 января 2019

Marshalling передает сигнатуру функции другому процессу, который находится на другой машине, и это обычно реализуется путем преобразования структурированных данных в специальный формат, который может быть перенесен в другие процессорные системы (сериализация / десериализация)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...