Практическое руководство. Использование winmdidl.exe и midlrt.exe для создания H-файлов из метаданных Windows

Winmdidl.exe и midlrt.exe разрешают взаимодействие COM-уровня между машинным кодом C++ и компонентами среды выполнения Windows. Winmdidl.exe принимает в качестве входных данных WINMD-файл, содержащий метаданные для компонента среды выполнения Windows, и выводит IDL-файл. Midlrt.exe преобразовывает этот IDL-файл в файлы заголовков, которые можно использовать в коде C++. Оба инструмента запускаются с помощью командной строки.

Эти инструменты используются в следующих двух сценариях:

  • создание пользовательских IDL-файлов и файлов заголовков, чтобы приложение C++, написанное с помощью библиотеки шаблонов среды выполнения Windows (WRL), могло использовать пользовательский компонент среды выполнения Windows;

  • создание прокси-сервера и файлов-заглушек для определяемых пользователем типов событий в компоненте среды выполнения Windows. Дополнительные сведения см. в разделе "Пользовательские события и методы доступа к событиям" в компонентах среда выполнения Windows.

Эти инструменты требуются только для синтаксического анализа пользовательских WINMD-файлов. IDL- и H-файлы для компонентов операционной системы Windows уже созданы. По умолчанию в Windows 8.1 они находятся в папке \Program Files (x86)\Windows Kits\8.1\Include\winrt\.

Расположение инструментов

По умолчанию в [Windows 8.1 winmdidl.exe и midlrt.exe находятся в C:\Program Files (x86)\Windows Kits\8.1\. Различные версии этих инструментов также доступны в папках \bin\x86\ и \bin\x64\.

Аргументы командной строки winmdidl

Winmdidl.exe [/nologo] [/suppressversioncheck] [/time] [/outdir:dir] [/banner:file] [/utf8] Winmdfile

/nologo
Блокирует отображение в консоли сообщения об авторских правах и номере версии winmdidl.

/suppressversion проверка
Не используется.

/Время
Выводит общее время выполнения в окно консоли.

/outdir:dir
Задает выходной каталог. Если путь содержит пробелы, используйте кавычки. Каталог выходных данных по умолчанию — <диск>:\Users\username>\<AppData\Local\VirtualStore\Program Files (x86)\Microsoft Visual Studio 12.0\.

/banner:file
Указывает файл, содержащий пользовательский текст, который необходимо вставить в начало сообщения по умолчанию об авторских правах и версии winmdidl в верхней части сгенерированного IDL-файла. Если путь содержит пробелы, используйте кавычки.

/utf8
Файл будет отформатирован в кодировке UTF-8.

Winmdfile
Имя WINMD-файла для анализа. Если путь содержит пробелы, используйте кавычки.

Аргументы командной строки midlrt

Ознакомьтесь с компонентами MIDLRT и среда выполнения Windows.

Примеры

В следующем примере показана работа команды winmdidl в командной строке Visual Studio x86. Она определяет выходную папку и файл, содержащий специальный текст баннера, который следует добавить в сгенерированный IDL-файл.

C:\Program Files (x86)\Microsoft Visual Studio 12.0>winmdidl /nologo /outdir:c:\users\giraffe\documents\ /banner:c:\users\giraffe\documents\banner.txt "C:\Users\giraffe\Documents\Visual Studio 2013\Projects\Test_for_winmdidl\Debug\Test_for_winmdidl\test_for_winmdidl.winmd"

В следующем примере показан вывод в окно консоли результата работы команды winmdidl, который указывает, что операция выполнена успешно.

Создание c:\users\giraffe\documents\\Test_for_winmdidl.idl

Затем для созданного IDL-файла выполняется команда midlrt. Обратите внимание, что аргумент metadata_dir указан после имени IDL-файла. Путь \WinMetadata\ является обязательным — это расположение для windows.winmd.

C:\Program Files (x86)\Microsoft Visual Studio 12.0> midlrt "c:\users\username\documents\test_for_winmdidl.idl" /metadata_dir "C:\Windows\System32\WinMetadata"

Замечания

Выходной файл операции winmdidl будет иметь то же имя, что и входной файл, но с расширением IDL.

При разработке компонента среды выполнения Windows, который будет доступен из WRL, можно указать в качестве действий после сборки запуск инструментов winmdidl.exe и midlrt.exe для создания IDL- и H-файлов при каждой сборке. Пример см. в разделе "Повышение событий" в компонентах среда выполнения Windows.