Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

#pragma managed

Что означает следующая строка??? #pragma managed(push, off)


Ответ

Это нужно при компиляции исходников на C++/CLI.
C++/CLI — это .NET-расширение языка C++. При выполнении кода C++/CLI участвуют две рантайм-библиотеки: нативная и управляемая. Некоторые правила для этих рантайм-библиотек отличаются (например, время создания статических объектов). Обычно функции компилируются в CLR-режиме, но вы можете явно указать нативный, совместимый со стандартом C++ режим, используя #pragma managed
При компиляции в нативном режиме эта функция «общается» с нативным рантаймом, а при компиляции в управляемом — в управляемом. В частности, нативная функция не может использовать управляемые типы (к примеру, System::String^). #pragma managed(push, off) собственно означает «запомнить текущее состояние в стеке состояний, и установить нативный режим». В конце нативного участка обычно следует #pragma managed(pop), что восстанавливает предыдущее состояние из стека.
По поводу языковых различий управляемом и неуправляемом режимах, в документации есть полный список. В частности, не работает inline assembler и vprintf
Также, управляемые функции могут быть обнаружены в модуле при помощи рефлексии, в отличие от нативных.

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

Комментариев нет:

Отправить комментарий