Domanda

Ho letto (nel libro di Nish Sivakumar C++/CLI in azione tra gli altri posti) che dovresti usare il decoratore __clrcall sulle chiamate di funzione per evitare il double-thunk, nei casi in cui sai che il metodo non verrà mai chiamato da codice non gestito.Nish afferma inoltre che se la firma del metodo contiene tipi CLR, il compilatore JIT aggiungerà automaticamente __clrcall.Ciò che non mi è chiaro è se devo includere __clrcall quando creo proprietà C++/CLI.In un certo senso, le proprietà sono accessibili solo dai linguaggi .NET, dall'altro il compilatore C++/CLI (credo) genera semplicemente metodi (ad es.***_get() ) richiamabili sia dal codice gestito che da quello non gestito.Quindi devo utilizzare il modificatore __clrcall sulle mie proprietà e, in tal caso, dove va?Sulle funzioni get/set stesse?

È stato utile?

Soluzione

@Mike B - Grazie per il suggerimento su ildasm: non conoscevo quello strumento.

Sembra che io abbia letto/frainteso Nish: il modificatore __clrcall e il problema del doppio thunk che elimina si applicano solo ai metodi delle classi NATIVE.Tutti i metodi delle classi gestite sono __clrcall per impostazione predefinita, il che sembra ovvio in retrospettiva.

Evidentemente il libro di Marcus Heege Esperto C++/CLI è disponibile come download gratuito, e ha una bella tabella a pagina 215 che riassume le convenzioni di chiamata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top