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

Что упорядочивает и почему нам нужен он?

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

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

87
задан ZenLulz 18 May 2019 в 13:44
поделиться

4 ответа

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

72
ответ дан 24 November 2019 в 07:51
поделиться

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

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

10
ответ дан 24 November 2019 в 07:51
поделиться

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

Эта страница содержит список непреобразуемых и непреобразуемых типов .

6
ответ дан 24 November 2019 в 07:51
поделиться

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

5
ответ дан 24 November 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: