Я читал (среди прочего, в книге Ниша Сивакумара C++ / CLI в действии), что вы должны использовать декоратор __clrcall для вызовов функций, чтобы избежать двойного преобразования, в тех случаях, когда вы знаете, что метод никогда не будет вызываться из неуправляемого кода. Ниш также говорит, что если сигнатура метода содержит какие-либо типы CLR, то JIT-компилятор автоматически добавит __clrcall. Что мне не ясно, так это то, нужно ли мне включать __clrcall при создании свойств C++ / CLI. В одном смысле свойства доступны только из языков .NET, с другой стороны, компилятор C++ / CLI (я думаю) просто генерирует методы (например, *** _ get ()), которые вызываются как из управляемого, так и из неуправляемого кода. Итак, мне нужно использовать модификатор __clrcall для моих свойств, и если да, то куда он денется? О самих функциях get / set?





@Mike B - Спасибо за подсказку по ildasm - я не знал об этом инструменте.
Похоже, я неправильно прочитал / неправильно понял Ниша - модификатор __clrcall и проблема двойного преобразования, которую он устраняет, применимы только к методам НАТИВНЫХ классов. Все методы управляемых классов по умолчанию являются __clrcall, что кажется очевидным в ретроспективе.
Очевидно, доступна книга Маркуса Хиге Эксперт C++ / CLIкак бесплатная загрузка, и у нее есть хорошая таблица на странице 215, которая суммирует соглашения о вызовах.