remarks example cref c# .net unmanaged marshalling managed

example - remarks c#



Marshalling: ¿qué es y por qué lo necesitamos? (5)

Como dice Vinko en los comentarios, puedes pasar los tipos primitivos sin una clasificación especial. Estos se llaman tipos "blittables" e incluyen tipos como byte, short, int, long, etc. y sus contrapartes sin firmar.

Esta página contiene la lista de tipos blittable y no blittable .

¿Qué es organizar y por qué lo necesitamos?

Me resulta difícil creer que no puedo enviar un int por el cable de C # a C y tener que ordenarlo. ¿Por qué no puede C # enviar los 32 bits con una señal de inicio y finalización, diciendo al código C que ha recibido un int ?

Si hay buenos tutoriales o sitios sobre por qué necesitamos una clasificación y cómo usarlos, sería genial.


Debido a que los diferentes idiomas y entornos tienen diferentes convenciones de llamadas, diferentes convenciones de diseño, diferentes tamaños de primitivas (ver char en C # y char en C), diferentes convenciones de creación / destrucción de objetos y diferentes pautas de diseño. Necesitas una forma de sacar las cosas de la tierra administrada a un lugar donde la tierra no administrada pueda verla y entenderla y viceversa. Para eso es la clasificación.


El código .NET (C #, VB) se denomina "administrado" porque es "administrado" por CLR ( Common Language Runtime )

Si escribe código en C o C ++ o ensamblador, todo se llama "no administrado", ya que no está involucrado ningún CLR. Usted es responsable de la asignación / desasignación de memoria.

Marshaling es el proceso entre el código administrado y el código no administrado; Es uno de los servicios más importantes que ofrece CLR .


Marshalling a int es idealmente justo lo que usted dijo: copiar la memoria de la pila administrada de CLR en algún lugar donde el código C pueda verla. Las cadenas difíciles, los objetos, las matrices y otros tipos son las cosas difíciles.

Pero la capa de interoperabilidad de P / Invoke se ocupa de casi todas estas cosas por usted.


Marshalling es un "medio" por falta de una mejor palabra o una puerta de enlace, para comunicarse con los tipos de datos del mundo no administrado y viceversa, mediante el uso del pinvoke, y asegura que los datos se devuelvan de manera segura.