Ориентированные заглушки для конкретных 32-разрядных или 64-разрядных платформ

Некоторые функции Microsoft RPC и MIDL 3.0 и более поздних версий являются платформенными.

В качестве меры предосторожности компиляторы MIDL 3.0 и более поздних версий создают защитные механизмы, которые упрощают проверку совместимости на стадии компиляции на C. MIDL создает два типа защиты: зависящую от платформы защиту (32-разрядная и 64-разрядная) и зависящую от версии защиту (зависимость набора функций). Например, MIDL создает следующий предохранитель, чтобы предотвратить выполнение компиляции 32-разрядной C-заглушки для других платформ.

#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 активировал защиту. К заметным функциям данного типа относятся переключатель /robust и атрибут [асинхронный], доступный в Windows 2000 и более поздних версиях, конструктор типа, параметр компилятора /Oif и атрибуты [user_marshal] и [wire_marshal]. Заглушки, использующие эти функции, не будут выполняться в более ранних системах.

Если вы знаете, что целевая платформа правильна для функций, которые вы используете и по-прежнему получаете ошибку, вам может потребоваться задать переменные среды соответствующим образом.

Сборка для Windows 2000 или более новые версии

  • Добавьте эту строку в файл makefile:

    CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
    

/target

/надежные

асинхронные

async_uuid

/Oi

трубы

wire_marshal

user_marshal

Управление типами данных OLE