Transição para MIDL 3.0 do MIDLRT clássico

MIDLRT também é conhecido como MIDL 2,0. Consulte MIDL 1,0, 2,0 e 3,0.

O MIDL 3,0 pode coexistir no mesmo arquivo de origem com o MIDLRT clássico; Não é necessário converter o arquivo IDL todos de uma vez. Nenhuma nova opção de compilador é necessária para expressar que você está usando o MIDL 3,0. A opção existente /winrt habilita o MIDLRT clássico e o MIDL 3,0.

Você pode adicionar conteúdo de MIDL 3,0 a um tipo de MIDLRT existente. Especificamente, você pode usar MIDL 3,0 para definir interfaces que são adicionadas às definições de classe de tempo de execução criadas no MIDLRT. Isso permite o uso de novas técnicas, enquanto não requer uma conversão completa de um tipo ou arquivo. Veja um exemplo.

// Existing RTIDL interface definition.
[contract(FooContract, 1), exclusiveto(SampleClass), uuid(...)]
interface ISampleClass : IInspectable
{
    HRESULT Method1([in] boolean something, [in] HSTRING other);
}

// New MIDL 3.0 interface added; needs exclusiveto(), but not uuid().
[contract(FooContract, 2), exclusiveto(SampleClass)]
interface ISampleClass2
{
    Windows.Foundation.IAsyncOperation<String> TransformAsync(UInt32 count);
    String NameProperty { get; };
}

[contract(FooContract, 1)]
runtimeclass SampleClass
{
    [default] interface ISampleClass;
    // Reference to MIDL 3.0-defined interface.
    [contract(FooContract, 2)] interface ISampleClass2;
}

Adicionar construções MIDL 3,0 às definições de runtimeclass MIDLRT existentes produz um erro como este.

1>midl : error MIDL9008 : internal compiler problem - See documentation for suggestions on how to find a workaround.
errors in directory t:\compdev1\src\mincore\coreui\published\idl
t:\compdev1\src\midl : error MIDL9008 : internal compiler problem - See documentation for suggestions on how to find a workaround.
1>midl: Assertion failed: pN->NodeKind() == NODE_INTERFACE_GROUP_MEMBER, file com\rpc\midl\midlrt\front\nodeskl.cxx, line 1403
1>NMAKE : fatal error U1077: 't:\compdev1\src\tools\x86\midl.EXE' : return code '0x2330'

Corrija isso convertendo a classe completa para MIDL 3,0 ou pela técnica acima que adiciona uma nova interface e a adiciona à classe.