Udostępnij za pośrednictwem


Wymagania preprocesora języka C dla MIDL

Ta strona dotyczy tylko deweloperów, którzy mają określone powody, aby zastąpić preprocesor Microsoft C/C++ jako preprocesor używany przez MIDL lub deweloperów, którzy muszą określić dostosowane przełączniki preprocesora. Przełączniki MIDL /cpp_cmd, /cpp_opti /no_cpp są używane do zastępowania domyślnego zachowania kompilatora. Zazwyczaj nie ma powodu, aby zastąpić preprocesor microsoft C/C++, ani określić dostosowanych przełączników preprocesora.

Kompilator MIDL używa preprocesora języka C podczas początkowego przetwarzania pliku IDL. Środowisko kompilacji używane podczas kompilowania plików IDL jest skojarzone z domyślnym preprocesorem C/C++. Jeśli ma być używany inny preprocesor, przełącznik kompilatora MIDL /cpp_cmd umożliwia zastąpienie domyślnej nazwy preprocesora C/C++::

midl /cpp_cmd preprocessor_name filename

preprocessor_name

Określa nazwę preprocesora, który ma być używany przez MIDL. Można określić ścieżkę do pliku binarnego. Rozszerzenie .exe jest opcjonalne.

nazwy pliku

Określa nazwę pliku IDL.

  • Kompilator MIDL oczekuje, że każdy preprocesor będzie przestrzegał następujących konwencji:
  • Plik wejściowy jest określony jako ostatni argument w wierszu polecenia.
  • Preprocesor musi przekierowywać dane wyjściowe do standardowego urządzenia wyjściowego stdout.
  • W strumieniu wyjściowym preprocesora dyrektywy #line są obecne, aby umożliwić lepsze komunikaty diagnostyczne.
  • Dyrektywy wiersza są jedynymi dyrektywami preprocesora w strumieniu wyjściowym.

MIDL zakłada, że zduplikowany preprocesor usunął wszystkie dyrektywy preprocesora ze strumienia wejściowego kompilatora, z wyjątkiem wystąpień dyrektywy liniowej niezbędnej do utworzenia lokalizacji źródłowej w komunikatach kompilatora. W przypadku wskazania preprocesora innego niż preprocesor języka Microsoft C/C++ lub podczas określania opcji preprocesora za pomocą przełącznika /cpp_opt należy określić odpowiednią opcję preprocesora, która umieszcza dyrektywy liniowe w strumieniu wejściowym kompilatora. Na przykład w przypadku preprocesora Microsoft C/C++ należy użyć opcji /E:

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

Dyrektywa #line jest akceptowana przez MIDL w jednej z następujących form:

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

Pełny opis dyrektywy liniowej i innych dyrektyw preprocesora można znaleźć w dokumentacji używanego kompilatora języka C.

MIDL akceptuje tylko dyrektywę preprocesora liniowego. W związku z tym, jeśli jest używany przełącznik /no_cpp, plik wejściowy nie może mieć innych dyrektyw preprocesora lub plik wejściowy musi zostać przetworzony przed wywołaniem MIDL.

Aby uzyskać więcej informacji, zobacz Do czynienia z #defines w plikach IDL.