Freigeben über


C-Präprozessoranforderungen für MIDL

Diese Seite gilt nur für Entwickler, die bestimmte Gründe haben, den Microsoft C/C++-Präprozessor als von MIDL verwendeten Präprozessor zu ersetzen, oder für Entwickler, die benutzerdefinierte Präprozessorswitches angeben müssen. Die MIDL-Schalter /cpp_cmd, /cpp_opt und /no_cpp werden verwendet, um das Standardverhalten des Compilers zu überschreiben. Es gibt in der Regel keinen Grund, den Microsoft C/C++-Präprozessor zu ersetzen oder benutzerdefinierte Präprozessorschalter anzugeben.

Der MIDL-Compiler verwendet einen C-Präprozessor während der erstverarbeitung der IDL-Datei. Die beim Kompilieren der IDL-Dateien verwendete Buildumgebung ist einem C/C++-Standard-Präprozessor zugeordnet. Wenn ein anderer Präprozessor verwendet werden soll, aktiviert der MIDL-Compilerschalter /cpp_cmd eine Überschreibung des C/C++-Standardvorprozessornamens:

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.

Dateiname

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 Präprozessor muss die Ausgabe an das Standardausgabegerät stdout umleiten.
  • Im Ausgabestream des Präprozessors sind die #line-Anweisungen vorhanden, um bessere Diagnosemeldungen zu ermöglichen.
  • Die Zeilendirektiven sind die einzigen Präprozessordirektiven im Ausgabestream.

MIDL geht davon aus, dass der spawnte Präprozessor alle Präprozessordirektiven aus dem Eingabedatenstrom des Compilers entfernt hat, mit Ausnahme der Vorkommen der Zeilendirektive, die zum Ermitteln des Quellstandorts in Compilernachrichten erforderlich ist. Wenn Sie einen anderen Präprozessor als den Microsoft C/C++-Präprozessor angeben oder Präprozessoroptionen mit dem Schalter /cpp_opt angeben, ist die Angabe einer entsprechenden Präprozessoroption erforderlich, die die Zeilenanweisungen im Eingabestream des Compilers platziert. Für den Microsoft C/C++-Präprozessor muss beispielsweise die Option /E verwendet werden:

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

Die #line-Direktive 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 Zeilenvorprozessor-Direktive. Wenn daher der Schalter /no_cpp verwendet wird, darf die Eingabedatei keine anderen Präprozessordirektiven enthalten, oder die Eingabedatei muss vor dem Aufrufen von MIDL verarbeitet worden sein.

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