#pragma managed

291
24 мая 2017, 08:11

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

Answer 1

Это нужно при компиляции исходников на C++/CLI.

C++/CLI — это .NET-расширение языка C++. При выполнении кода C++/CLI участвуют две рантайм-библиотеки: нативная и управляемая. Некоторые правила для этих рантайм-библиотек отличаются (например, время создания статических объектов). Обычно функции компилируются в CLR-режиме, но вы можете явно указать нативный, совместимый со стандартом C++ режим, используя #pragma managed.

При компиляции в нативном режиме эта функция «общается» с нативным рантаймом, а при компиляции в управляемом — в управляемом. В частности, нативная функция не может использовать управляемые типы (к примеру, System::String^). #pragma managed(push, off) собственно означает «запомнить текущее состояние в стеке состояний, и установить нативный режим». В конце нативного участка обычно следует #pragma managed(pop), что восстанавливает предыдущее состояние из стека.

По поводу языковых различий управляемом и неуправляемом режимах, в документации есть полный список. В частности, не работает inline assembler и vprintf.

Также, управляемые функции могут быть обнаружены в модуле при помощи рефлексии, в отличие от нативных.

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

READ ALSO
Балансировка бинарного дерева поиска

Балансировка бинарного дерева поиска

Доброго времени сутокЕсть бинарное дерево поиска

740
оптимизировать вычисления

оптимизировать вычисления

при реализации этой задачи столкнулся с проблемой медленных вычислений

307
Какой алгоритм использовать?

Какой алгоритм использовать?

Есть n городов, которые необходимо соединить дорогами, так, чтобы можно было добраться из любого города в любой другой (напрямую или через...

260