2008-09-17 6 views
2

Ich habe gelesen (in Nish Sivakumar Buch C++/CLI In Aktion unter anderem), dass Sie den __clrcall Dekorator auf Funktionsaufrufe verwenden sollten, um Doppel-Thunking in Fällen zu vermeiden wo Sie wissen, dass die Methode niemals aus nicht verwaltetem Code aufgerufen wird. Nish sagt auch, dass, wenn die Methodensignatur CLR-Typen enthält, der JIT-Compiler automatisch den __clrcall hinzufügt. Was mir nicht klar ist, ist, ob ich beim Erstellen von C++/CLI-Eigenschaften __clrcall einbeziehen muss. In einer Hinsicht sind Eigenschaften nur aus .NET-Sprachen zugänglich, auf der anderen Seite erzeugt der C++/CLI-Compiler (denke ich) nur Methoden (z.B. *** _ get()), die sowohl von verwaltetem als auch nicht verwaltetem Code aufrufbar sind. Muss ich also den __clrcall-Modifikator für meine Eigenschaften verwenden, und wenn ja, wohin? Auf den Get/Set-Funktionen selbst?Vermeiden von Doppel-Thunking mit C++/CLI-Eigenschaften

Antwort

3

@Mike B - Danke für den Tipp auf ildasm - Ich wusste nicht über dieses Tool.

Es scheint, dass ich Nish falsch gelesen/mißverstanden habe - der __clrcall-Modifizierer und das doppelte Thunking-Problem, das es beseitigt, gelten nur für Methoden der NATIVE-Klassen. Alle Methoden verwalteter Klassen sind standardmäßig __clrcall - was im Nachhinein offensichtlich erscheint.

Offenbar Marcus Heege Buch Expert C++/CLI ist verfügbar as a free download, und es hat eine schöne Tabelle auf Seite 215, die die Aufrufkonventionen zusammenfasst.

+0

Danke für das Follow-up. –

Verwandte Themen