Маршалинг данных между управляемым и неуправляемым кодом - Помощник по взаимодействию P/Invoke

ОГЛАВЛЕНИЕ


Помощник по взаимодействию P/Invoke

Необходимость знать и помнить все перечисленные атрибуты и правила может вас несколько огорчить. В конце концов, для большинства разработчиков управляемого кода достаточно уметь быстро определить сигнатуру P/Invoke для той или иной функции Win32® API и вставить ее в код. Тут на помощь приходит помощник по взаимодействию P/Invoke (его можно загрузить на веб-узле журнала MSDN Magazine). Это средство весьма эффективно при преобразовании C++ в управляемые сигнатуры P/Invoke и обратно. В нем есть база данных функций, типов и переменных Win32, так что банальные операции добавления подписей Win32 P/Invoke в код на C# или Visual Basic выполняются безо всяких проблем. К помощнику прилагаются две программы командной строки: SigImp и SigExp. Их можно использовать для пакетной обработки файлов. Кроме этого, существует средство с графическим интерфейсом, объединяющее функции обеих программ.

Графический интерфейс удобен при выполнении простейших преобразований. В нем три вкладки: SigExp, SigImp Search и SigImp Translate Snippet.

SigExp позволяет преобразовать управляемую сигнатуру в неуправляемую. Программа считывает все управляемые сборки и находит все объявления P/Invoke и все импортированные типы COM. На основании полученных данных программа создает соответствующие сигнатуры для машинного кода на C (см. рис. 11).


Рис. 11 Служебная программа P/Invoke Interop Assistant — SigExp

Вкладки SigImp Search и SigImp Translate Snippet позволяют преобразовать неуправляемые сигнатуры в управляемые. Они создают управляемые сигнатуры и определения либо на C#, либо на Visual Basic на основании машинных типов, функций, переменных и фрагментов кода сигнатур функций в машинном коде, введенных вручную.

Вкладка SigImp Search позволяет пользователю выбрать язык, на котором будет создан управляемый код, и указать машинный тип, процедуру или переменную, на основании которой будет выполняться преобразование. Средство выдает список поддерживаемых типов, методов и переменных, собранных из заголовков Windows SDK (см. рис. 12).


Рис. 12 Служебная программа P/Invoke Interop Assistant — SigImp Search

Вкладка SigImp Translate Snippet позволяет пользователю написать собственный фрагмент машинного кода. После этого программа создает и отображает в основном окне эквивалентный управляемый код, как показано на рис. 13.


Рис. 13 Служебная программа P/Invoke Interop Assistant — SigImp Translate Snippet

Подробные сведения о средстве с графическим интерфейсом и о программах командной строки помощника по взаимодействию P/Invoke вы найдете в документации, прилагаемой к средствам.