Question

J'ai lu (dans le livre de Nish Sivakumar entre autres C ++ / CLI en action ) que vous devriez utiliser le décorateur __clrcall lors d'appels de fonction pour éviter les doubles tentatives, dans les cas où vous savez que la méthode ne sera jamais appelée à partir de code non managé. Nish indique également que si la signature de la méthode contient des types CLR, le compilateur JIT ajoutera automatiquement le __clrcall. Ce qui m'est incertain, c'est si j'ai besoin d'inclure __clrcall lorsque je crée des propriétés C ++ / CLI. Dans un sens, les propriétés ne sont accessibles que depuis les langages .NET. Par ailleurs, le compilateur C ++ / CLI (je pense) ne génère que des méthodes (par exemple *** _ get ()) appelables à partir de code géré et non géré. Alors, dois-je utiliser le modificateur __clrcall sur mes propriétés, et si oui, où va-t-il? Sur les fonctions get / set elles-mêmes?

Était-ce utile?

La solution

@Mike B - Merci pour cette astuce sur ildasm - je ne connaissais pas cet outil.

Il semble que j'ai mal interprété / incompris Nish - le modificateur __clrcall et le problème de double impulsion qu'il élimine ne s'appliquent qu'aux méthodes des classes NATIVE. Toutes les méthodes des classes gérées sont __clrcall par défaut - ce qui semble évident rétrospectivement.

Le livre de Marcus Heege Expert C ++ / CLI est disponible est téléchargeable gratuitement . Le tableau qui suit présente un tableau récapitulatif des conventions d’appel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top