Como: usar winmdidl.exe e midlrt.exe para criar arquivos .h com metadados do Windows
Winmdidl.exe e midlrt.exe habilitam a interação no nível COM entre o código C++ nativo e os componentes Windows Runtime. Winmdidl.exe usa como entrada um arquivo .winmd que contém metadados para um componente Windows Runtime e gera um arquivo IDL. Midlrt.exe converte esse arquivo IDL em arquivos de cabeçalho que o código C++ pode consumir. Ambas as ferramentas são executadas na linha de comando.
Essas ferramentas são usadas em dois cenários principais:
Criar arquivos de IDL e cabeçalho personalizados para que um aplicativo C++ escrito usando a WRL (Biblioteca de Modelos de Windows Runtime) possa consumir um componente de Windows Runtime personalizado.
Gerando arquivos proxy e stub para tipos de evento definidos pelo usuário em um componente Windows Runtime. Para obter mais informações, consulte: Eventos personalizados e acessadores de evento nos componentes do Windows Runtime.
Essas ferramentas são necessárias apenas para analisar arquivos .winmd personalizados. Os arquivos .idl e .h para componentes do sistema operacional Windows já são gerados para você. Por padrão, no Windows 8.1, eles estão localizados em \Arquivos de Programas (x86)\Kits do Windows\8.1\Include\winrt\.
Local das ferramentas
Por padrão no Windows 8.1, winmdidl.exe e midlrt.exe estão localizados em C:\Arquivos de Programas (x86)\Kits do Windows\8.1\. As versões das ferramentas também estão disponíveis nas pastas \bin\x86\ e \bin\x64\.
Argumentos de linha de comando Winmdidl
Winmdidl.exe [/nologo] [/suppressversioncheck] [/time] [/outdir:dir] [/banner:file] [/utf8] Winmdfile
/nologo
Impede que o console exiba a mensagem de direitos autorais winmdidl e do número da versão.
/suppressversioncheck
Não usado.
/time
Exibe o tempo total de execução na saída do console.
/outdir:dir
Especifica um diretório de saída. Se o caminho contiver espaços, use aspas. O diretório de saída padrão é <drive>:\Users\<username>\AppData\Local\VirtualStore\Program Files (x86)\Microsoft Visual Studio 12.0\.
/banner:file
Especifica um arquivo que contém texto personalizado para acrescentar à mensagem de direitos autorais padrão e ao número de versão winmdidl na parte superior do arquivo .idl gerado. Se o caminho contiver espaços, use aspas.
/utf8
Faz com que o arquivo seja formatado como UTF-8.
Winmdfile
O nome do arquivo .winmd a ser analisado. Se o caminho contiver espaços, use aspas.
Os argumentos da linha de comando Midlrt
Consulte Componentes MIDLRT e Windows Runtime.
Exemplos
O exemplo a seguir mostra um comando winmdidl em um prompt de comando do Visual Studio x86. Ele especifica um diretório de saída e um arquivo que contém texto de faixa especial a ser adicionado ao arquivo .idl gerado.
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"
O exemplo a seguir mostra a exibição do console do winmdidl que indica que a operação foi bem-sucedida.
Gerando c:\users\giraffe\documents\\Test_for_winmdidl.idl
Em seguida, midlrt é executado no arquivo IDL gerado. Observe que o argumento metadata_dir é especificado após o nome do arquivo .idl. O caminho de \WinMetadata\ é necessário – é o local para 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"
Comentários
O arquivo de saída de uma operação winmdidl tem o mesmo nome que o arquivo de entrada, mas tem a extensão de nome de arquivo .idl.
Se você estiver desenvolvendo um componente Windows Runtime que será acessado a partir do WRL, poderá especificar winmdidl.exe e midlrt.exe para serem executados como etapas pós-build para que os arquivos .idl e .h sejam gerados em cada build. Para ver um exemplo, consulte Acionando eventos em componentes do Windows Runtime.