Избежание двойного подхода с помощью свойств C ++ / CLI - PullRequest
2 голосов
/ 17 сентября 2008

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

1 Ответ

3 голосов
/ 18 сентября 2008

@ Майк Б - Спасибо за совет по ildasm - я не знал об этом инструменте.

Похоже, что я неправильно прочитал / неправильно понял Nish - модификатор __clrcall и устраняемая проблема двойного преобразования применимы только к методам классов NATIVE. Все методы управляемых классов по умолчанию являются __clrcall - что очевидно в ретроспективе.

Очевидно, что книга Маркуса Хиджа Эксперт C ++ / CLI доступна для бесплатной загрузки , и на странице 215 есть хорошая таблица, в которой обобщены соглашения о вызовах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...