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.