Маршалинг данных между управляемым и неуправляемым кодом
ОГЛАВЛЕНИЕ
К счастью, взаимодействие в платформе Microsoft® .NET позволяет открыть канал между управляемым и неуправляемым кодом, и немаловажную роль в этом подключении играет маршалинг: он обеспечивает обмен данными между управляемым и неуправляемым кодом (см. рис. 1). Выполнение маршалинга данных между управляемым и неуправляемым кодом средой CLR определяется многими факторами, в частности атрибутами [MarshalAs], [StructLayout], [InAttribute], [OutAttribute], равно как и от некоторыми ключевыми словами языка, например out и ref в C#.
Поскольку этих факторов весьма много, правильный маршалинг данных может оказаться сложной задачей, требующей знакомства со многими деталями как в неуправляемом, так и в управляемом коде. В этой статье мы коснемся основополагающих, но неясных вопросов, возникающих при повседневной работе с маршалингом. Мы оставим в стороне такие темы, как пользовательская настройка маршалинга, маршалинг сложных структур и т. п., однако, когда вы твердо освоите основы, вы сможете перейти и к более сложным процедурам.