Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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 передает сигнатуру функции другому процессу, который находится на другой машине, и это обычно реализуется путем преобразования структурированных данных в специальный формат, который может быть перенесен в другие процессорные системы (сериализация/десериализация)