Krav för C-preprocessor för MIDL
Den här sidan gäller endast för utvecklare som har särskilda skäl att ersätta Microsoft C/C++-förprocessorn som den förprocessor som används av MIDL, eller för utvecklare som måste ange anpassade växlar för förprocessorer. MIDL-växlarna /cpp_cmd, /cpp_optoch /no_cpp används för att åsidosätta kompilatorns standardbeteende. Det finns vanligtvis ingen anledning att ersätta Microsoft C/C++-förprocessorn eller att ange anpassade förprocessorväxlar.
MIDL-kompilatorn använder en C-förprocessor under den första bearbetningen av IDL-filen. Den byggmiljö som används vid kompilering av IDL-filerna är associerad med en C/C++-standardpreprocessor. Om en annan förprocessor ska användas aktiverar MIDL-kompilatorväxeln /cpp_cmd en åsidosättning av standardnamnet C/C++-preprocessor:
midl /cpp_cmd preprocessor_name filename
-
preprocessor_name
-
Anger namnet på den förprocessor som ska användas av MIDL. Kan anges med en sökväg till binärfilen. Tillägget .exe är valfritt.
-
filnamn
-
Anger namnet på IDL-filen.
- MIDL-kompilatorn förväntar sig att alla förprocessorer följer följande konventioner:
- Indatafilen anges som det sista argumentet på kommandoraden.
- Förprocessorn måste omdirigera utdata till standardutdataenheten stdout.
- I utdataströmmen för förprocessorn finns de #line direktiven för att möjliggöra bättre diagnostikmeddelanden.
- Linjedirektiven är de enda förprocessordirektiven i utdataströmmen.
MIDL förutsätter att den skapade förprocessorn har tagit bort alla förprocessordirektiv från kompilatorns indataström, med undantag för de förekomster av linjedirektivet som krävs för att hitta källplatsen i kompilatormeddelanden. När du anger en förprocessor som skiljer sig från Microsoft C/C++-förprocessorn, eller när du anger förprocessoralternativ med växeln /cpp_opt, måste du ange ett lämpligt förprocessoralternativ som placerar linjedirektiven i kompilatorns indataström. För Microsoft C/C++-förprocessorn måste till exempel alternativet /E användas:
midl /cpp_cmd cl.exe /cpp_opt "/E" file.idl
Det #line direktivet godkänns av MIDL i något av följande formulär:
#line digit-sequence "filename" new-line
# digit-sequence "filename" new-line
En fullständig beskrivning av linjedirektivet och andra förprocessordirektiv finns i dokumentationen för C-kompilatorn som används.
MIDL accepterar endast linjeförprocessordirektivet. Om växeln /no_cpp används får indatafilen därför inte ha andra förprocessordirektiv, eller så måste indatafilen ha bearbetats innan MIDL anropas.
Mer information finns i Hantera #defines i IDL Files.