Избегание двойного прогона с помощью свойств C ++ / CLI

StackOverflow https://stackoverflow.com/questions/86977

  •  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, в которой кратко изложены соглашения о вызовах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top