Freigeben über


Anforderungen für C-Preprocessor für MIDL

Diese Seite gilt nur für Entwickler, die bestimmte Gründe haben, den Microsoft C/C++-Präprozessor als den von MIDL verwendeten Präprozessor zu ersetzen, oder für Entwickler, die benutzerdefinierte Präprozessoroptionen angeben müssen. Die MIDL-Schalter /cpp_cmd, /cpp_optund /no_cpp werden verwendet, um das Standardverhalten des Compilers außer Kraft zu setzen. In der Regel gibt es keinen Grund, den Microsoft C/C++-Präprozessor zu ersetzen oder benutzerdefinierte Präprozessoroptionen anzugeben.

Der MIDL-Compiler verwendet während der anfänglichen Verarbeitung der IDL-Datei einen C-Präprozessor. Die Buildumgebung, die beim Kompilieren der IDL-Dateien verwendet wird, ist einem Standardmäßigen C/C++-Präprozessor zugeordnet. Wenn ein anderer Präprozessor verwendet werden soll, aktiviert der MIDL-Compilerschalter /cpp_cmd eine Außerkraftsetzung des Standardmäßigen C/C++-Preprozessornamens:

midl /cpp_cmd preprocessor_name filename

preprocessor_name

Gibt den Namen des Präprozessors an, der von MIDL verwendet werden soll. Kann mit einem Pfad zur Binärdatei angegeben werden. Die .exe Erweiterung ist optional.

Dateinamen

Gibt den Namen der IDL-Datei an.

  • Der MIDL-Compiler erwartet, dass jeder Präprozessor die folgenden Konventionen beachtet:
  • Die Eingabedatei wird als letztes Argument in der Befehlszeile angegeben.
  • Der Vorprozessor muss die Ausgabe an das Standardausgabegerät , stdout, umleiten.
  • Im Ausgabedatenstrom des Präprozessors sind die #line Direktiven vorhanden, um bessere Diagnosemeldungen zu ermöglichen.
  • Die Zeilendirektiven sind die einzigen Präprozessordirektiven im Ausgabedatenstrom.

MIDL geht davon aus, dass der spawnierte Präprozessor alle Präprozessordirektiven aus dem Eingabedatenstrom des Compilers entfernt hat, mit Ausnahme der Vorkommen der Zeilendirektive, die für das Anheften des Quellspeicherorts in Compilernachrichten erforderlich ist. Wenn ein präprozessor anders als der Microsoft C/C++-Präprozessor angegeben wird, oder beim Angeben von Präprozessoroptionen mit dem Schalter /cpp_opt, ist die Angabe einer geeigneten Präprozessoroption, die die Zeilendirektiven in den Eingabedatenstrom des Compilers einfügt, erforderlich. For example, for the Microsoft C/C++ preprocessor the /E option would be used:

midl /cpp_cmd cl.exe /cpp_opt "/E" file.idl

Die richtlinie #line wird von MIDL in einer der folgenden Formen akzeptiert:

#line digit-sequence "filename" new-line
 
# digit-sequence "filename" new-line

Eine vollständige Beschreibung der Zeilendirektive und anderer Präprozessordirektiven finden Sie in der Dokumentation für den verwendeten C-Compiler.

MIDL akzeptiert nur die Line Preprocessor-Direktive. Wenn der Schalter /no_cpp verwendet wird, darf die Eingabedatei daher keine anderen Präprozessordirektiven aufweisen, oder die Eingabedatei muss vor dem Aufrufen von MIDL verarbeitet worden sein.

Weitere Informationen finden Sie unter Umgang mit #defines in IDL-Dateien.