103 votes

Marshaling - qu'est-ce que c'est et pourquoi en avons-nous besoin ?

Qu'est-ce que le triage et pourquoi en avons-nous besoin ?

J'ai du mal à croire que je ne puisse pas envoyer un int sur le fil de C# à C et je dois le rassembler. Pourquoi C# ne peut-il pas simplement envoyer les 32 bits avec un signal de départ et un signal d'arrivée, indiquant au code C qu'il a reçu un message de type int ?

S'il existe de bons tutoriels ou des sites expliquant pourquoi nous avons besoin de la maréchaussée et comment l'utiliser, ce serait formidable.

3voto

Maryam Sheikh Points 51

Le maréchalage consiste à transmettre la signature d'une fonction à un processus différent qui se trouve sur une autre machine, et il est généralement mis en œuvre par la conversion de données structurées en un format dédié, qui peut être transféré à d'autres systèmes de traitement (sérialisation / désérialisation).

1voto

Karthik Points 35

Qu'est-ce que le maréchalage ?
Le maréchalage est le processus de création d'un pont entre le code géré et le code non géré ; c'est l'homer qui transporte les messages de l'environnement géré vers l'environnement non géré et inversement. Il s'agit de l'un des principaux services offerts par le CLR (Common Language Runtime).

Étant donné que la plupart des types de l'environnement non géré n'ont pas d'équivalent dans l'environnement géré, vous devez créer des routines de conversion qui convertissent les types gérés en types non gérés et vice versa ; c'est le processus de marshaling.

Pour rappel, nous appelons le code .NET "géré" parce qu'il est contrôlé (géré) par le CLR. Les autres codes qui ne sont pas contrôlés par le CLR sont appelés non gérés.

Pourquoi la maréchaussée ?
Vous savez déjà que cette compatibilité n'existe pas entre les environnements gérés et non gérés. En d'autres termes, .NET ne contient pas les types HRESULT, DWORD et HANDLE qui existent dans le domaine du code non géré. Par conséquent, vous devez trouver un substitut .NET ou créer le vôtre si nécessaire. C'est ce qu'on appelle le marshaling.

Un exemple est le DWORD non géré ; il s'agit d'un entier 32 bits non signé, que nous pouvons donc convertir en System.UInt32 dans .NET. Par conséquent, System.UInt32 est un substitut du DWORD non géré. D'autre part, les types composés non gérés (structures, unions, etc.) n'ont pas d'homologues ou de substituts dans l'environnement géré. Ainsi, vous devrez créer vos propres types gérés (structures/classes) qui serviront de substituts aux types non gérés que vous utilisez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X