¿Qué es la clasificación y por qué la necesitamos?
Me cuesta creer que no pueda enviar un int
cable de C # a C y tener que ordenarlo. ¿Por qué C # no puede simplemente enviar los 32 bits con una señal de inicio y finalización, indicando al código C que ha recibido una int
?
Si hay buenos tutoriales o sitios sobre por qué necesitamos la clasificación y cómo usarlos, sería genial.
Respuestas:
Debido a que los diferentes lenguajes y entornos tienen diferentes convenciones de llamada, diferentes convenciones de diseño, diferentes tamaños de primitivas (cf.
char
en C # ychar
en C), diferentes convenciones de creación / destrucción de objetos y diferentes pautas de diseño. Necesita una forma de sacar las cosas de las tierras administradas y llevarlas a algún lugar donde las tierras no administradas puedan verlas y comprenderlas y viceversa. Para eso está la clasificación.fuente
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 hay CLR involucrado. Usted es responsable de toda 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 .
fuente
int
Idealmente, ordenar una es exactamente lo que dijo: copiar la memoria de la pila administrada de CLR en algún lugar donde el código C pueda verla. Clasificar cadenas, objetos, matrices y otros tipos son las cosas difíciles.Pero la capa de interoperabilidad P / Invoke se encarga de casi todas estas cosas por usted.
fuente
Como dice Vinko en los comentarios, puede pasar tipos primitivos sin ninguna clasificación especial. Estos se denominan tipos "blittable" e incluyen tipos como byte, short, int, long, etc. y sus contrapartes sin firmar.
Esta página contiene la lista de tipos blittables y no blittables .
fuente
Marshalling es un "medio" a falta de una palabra mejor o una puerta de enlace, para comunicarse con los tipos de datos del mundo no administrado y viceversa, utilizando el pinvoke, y garantiza que los datos se devuelvan de manera segura.
fuente
Marshalling es pasar la firma de una función a un proceso diferente que está en una máquina diferente, y generalmente se implementa mediante la conversión de datos estructurados a un formato dedicado, que se puede transferir a otros sistemas de procesamiento (serialización / deserialización).
fuente