Программирование arrow .NET Framework arrow Маршалинг данных между управляемым и неуправляемым кодом

Маршалинг данных между управляемым и неуправляемым кодом

Оглавление

Посмотрим правде в глаза: нет в мире совершенства. Мало кто при разработке использует только управляемый код. А между тем, тяжким грузом лежат устаревшие неуправляемые приложения, с которыми приходится мириться. Есть ли способ интегрировать проекты, в которых задействован как управляемый, так и неуправляемый код? Какой вид принимает этот способ: вызов неуправляемого кода из управляемого приложения или вызов управляемого кода из неуправляемого приложения?

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

Маршалинг данных между управляемым и неуправляемым кодом - .NET Framework - Microsoft .NET - Программирование, исходники, операционные системы
Рис. 1 Заполнение разрыва между машинным и управляемым кодом

Поскольку этих факторов весьма много, правильный маршалинг данных может оказаться сложной задачей, требующей знакомства со многими деталями как в неуправляемом, так и в управляемом коде. В этой статье мы коснемся основополагающих, но неясных вопросов, возникающих при повседневной работе с маршалингом. Мы оставим в стороне такие темы, как пользовательская настройка маршалинга, маршалинг сложных структур и т. п., однако, когда вы твердо освоите основы, вы сможете перейти и к более сложным процедурам.


 
« Предыдущая статья   Следующая статья »


  • .NET Framework, Оптимизация сериализации в .NET
    Приводятся код и методы, позволяющие разработчикам оптимизировать сериализацию данных....
  • .NET Framework, Плавающая точка в .NET - часть 1: принципы и форматы
    Данная статья представит основные принципы арифметических операций с плавающей точкой: числовые форматы, точности и достоверность, погрешности округления. Также в статью включено обсуждение типов плавающей запятой в .NET....
  • .NET Framework, JIT-оптимизации
    Компилятор .NET Just-In-Time Compiler (JIT) считается многими одним из основных преимуществ производительности CLR по сравнению с JVM и другими управляемыми средами, которые используют двоичный код, скомпилированный компилятором JIT. ...
  • .NET Framework, Инъекции CLR: замена методов во время выполнения
    Многие из нас, наверняка, были заинтересованы в том, как работает универсальный язык CLR. Одной из наиболее интересных вещей является динамический компилятор JIT (Just In Time Compiler). Мы рассмотрим то, как JIT компилирует MSIL и создадим утилиту, которая позволяет программным образом заменить любой метод (JIT) другим во время выполнения. Мы также создадим отладочную утилиту, которая прехватывает JIT-вызовы и выводит в консоль информацию о диагноcnbrt....
  • .NET Framework, Оптимизация запуска приложений .NET
    Ждать, пока приложение запустится, неприятно для многих пользователей, поэтому ускорение запуска приложений клиентов может значительно улучшить первое впечатление от вашей работы. И так как скорость запуска имеет значение, следует знать факторы, которые на нее влияют, чтобы избежать распространенных ошибок....
  • .NET Framework, Создание компилятора языка для .NET Framework
    Эксперты по компиляторам являются знаменитостями в компьютерном мире. Я видел, как Андерс Хейльсберг (Anders Hejlsberg) представлял презентацию на конференции разработчиков Professional Developers Conference и когда он сошел со сцены, его встретила целая орда мужчин и женщин, просящих поставить автограф на книгу, или сняться на фотографии вместе с ними. Люди, посвящающие свое время изучению и пониманию всех тонкостей лямбда-выражений, систем типов и языков сборки, кажутся своего рода носителями ...
  • .NET Framework, IronPython как движок для макросов в .NET приложениях
    Подозреваю, многие из вас задумывались — как можно в .NET приложение добавить поддержку макросов — чтобы можно было расширять возможности программы без ее перекомпиляции и предоставить сторонним разработчикам возможность легко и просто получить доступ к API вашего приложения? В статье рассмотрено, как в качестве основы для выполнения макросов использовать IronPython — реализацию языка Python на платформе .NET....
  • .NET Framework, Xml сериализация в .Net Framework 2.0
    Xml широко используется в .Net приложениях, и .Net framework предоставляет богатые возможности по работе с Xml. Среди них: поддержка Xml DOM (System.Xml.XmlDocument), последовательное чтение - запись Xml, поддержка xPath и xQuery, поддержка XSLT, богатые возможности DataSet по работе с Xml и, наконец, Xml сериализация. ...