Назначение заглушки для конкретных 32-разрядных или 64-разрядных платформ
Некоторые функции Microsoft RPC и MIDL 3.0 и более поздних версий являются платформенными.
В качестве меры предосторожности компиляторы MIDL 3.0 и более поздних версий создают охранники, которые упрощают совместимость проверка во время этапа компиляции C. MIDL создает два типа охранников: зависимый от платформы охранник (32-разрядная и 64-разрядная) и зависимый от выпуска охранник (зависимость набора компонентов). Например, MIDL создает следующую защиту, чтобы предотвратить компиляцию C 32-разрядной заглушки для других платформ:
#if !defined(__RPC_WIN32__)
#error Invalid build platform for this stub.
#endif
Защита, зависящая от выпуска, активируется набором функций, найденных в обработанных файлах IDL и параметром /target . Например, если интерфейс использует функции, поддерживаемые только в Windows 2000 или более поздней версии, MIDL создает защиту с помощью макроса TARGET_IS_NT50_OR_LATER.
Макросы защиты, определенные в Rpcndr.h, зависят от параметра WINVER и _WIN32_WINNT и оцениваются компилятором C/C++.
Если во время компиляции C вы получите сообщение об ошибке, указывающее, что требуется определенная платформа для запуска заглушки, сначала проверка, чтобы убедиться, что вы не использовали функцию, которая недоступна на этой платформе. Функции, запускающие определенную охрану, перечислены в теле охранника. В предыдущем примере переключатель компилятора -Oicf активировал охрану. Важные функции этого типа включают /надежный коммутатор и атрибут [async], доступный в Windows 2000 и более поздних версий, конструктор типа канала, параметр компилятора /Oif и атрибуты [user_marshal] и [wire_marshal]. Заглушки, использующие эти функции, не будут выполняться в более ранних системах.
Если вы знаете, что целевая платформа правильна для функций, которые вы используете и по-прежнему получаете ошибку, вам может потребоваться задать переменные среды соответствующим образом.
Сборка для выпусков Windows 2000 или более поздних версий
Добавьте эту строку в файл makefile:
CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
См. также