Избегание двойного прогона с помощью свойств C ++ / CLI
-
01-07-2019 - |
Вопрос
Я читал (в книге Ниша Шивакумара C ++ / CLI В действии среди других мест), что вам следует использовать декоратор __clrcall при вызовах функций, чтобы избежать двойного прогона, в случаях, когда вы знаете, что метод никогда не будет вызван из неуправляемого кода.Nish также говорит, что если сигнатура метода содержит какие-либо типы CLR, то JIT-компилятор автоматически добавит __clrcall .Что мне непонятно, так это нужно ли мне включать __clrcall при создании свойств C ++ / CLI.В каком-то смысле свойства доступны только из .NET languages, с другой стороны, компилятор C ++ / CLI (я думаю) просто генерирует методы (например***_get()), которые могут вызываться как из управляемого, так и из неуправляемого кода.Итак, нужно ли мне использовать модификатор __clrcall в моих свойствах, и если да, то куда он ведет?О самих функциях получения / установки?
Решение
@Mike B - Спасибо за совет по ildasm - я не знал об этом инструменте.
Похоже, что я неправильно прочитал / недопонял Окончание - модификатор __clrcall и устраняемая им проблема двойного прогона применимы только к методам СОБСТВЕННЫХ классов.Все методы управляемых классов по умолчанию являются __clrcall, что кажется очевидным в ретроспективе.
Очевидно, книга Маркуса Хига Эксперт C ++/ CLI имеется в наличии в качестве бесплатной загрузки, и у него есть хорошая таблица на странице 215, в которой кратко изложены соглашения о вызовах.