Transizione a MIDL 3.0 da MIDLRT classica
MIDLRT è noto anche come MIDL 2.0. Vedere MIDL 1.0, 2.0 e 3.0.
MIDL 3.0 può coesistere nello stesso file di origine con MIDLRT classico. non è necessario convertire il file IDL contemporaneamente. Non sono necessarie nuove opzioni del compilatore per esprimere che si usa MIDL 3.0. L'opzione /winrt
esistente abilita sia MIDLRT classico che MIDL 3.0.
È possibile aggiungere contenuto MIDL 3.0 a un tipo MIDLRT esistente. In particolare, è possibile usare MIDL 3.0 per definire le interfacce aggiunte alle definizioni delle classi di runtime scritte in MIDLRT. In questo modo è possibile usare nuove tecniche, senza richiedere una conversione completa di un tipo o di un file. Ecco un esempio.
// 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;
}
L'aggiunta di costrutti MIDL 3.0 nelle definizioni di runtime MIDLRT esistenti genera un errore simile al seguente.
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'
Risolvere questo problema convertendo la classe completa in MIDL 3.0 o con la tecnica precedente che aggiunge una nuova interfaccia e la aggiunge alla classe .