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
2
A
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.
Verwandte Themen
- 1. Vermeiden von Einstellungen mit Kopierwarnung
- 2. Vermeiden von Service Locator mit AutoFac 2
- 3. ODP.NET: Vermeiden von Verbindungs-Timeouts mit Anschluss
- 4. Vermeiden von Preflight-OPTIONS-Anforderungen mit CORS
- 5. Vermeiden von TreeMap ConcurrentModificationException?
- 6. Vermeiden von Benutzereingaben
- 7. Vermeiden NoSuchElementException mit Strom
- 8. Stackoverflow in clojure Vermeiden mit
- 9. TransactionScope: Vermeiden von verteilten Transaktionen
- 10. Vermeiden von Schleifen in Scala
- 11. Vermeiden von zu viel Gießen
- 12. Ereignisketten mit asynchronen Datenabhängigkeiten vermeiden
- 13. Ausführen von Daemon mit exec-maven-plugin Vermeiden von `IllegalThreadStateException`
- 14. Vermeiden von Ausführungsverzögerungen in Aufgabenwarteschlangen
- 15. Vermeiden Sie instanceof mit Entitäten
- 16. R vermeiden Zwang mit Faktoren
- 17. Vermeiden von MySQL-Injektionen mit der Zend_Db-Klasse
- 18. Vermeiden von halben Pixeln mit OpenGL ES unter iOS
- 19. Callbackhölle mit Async vermeiden, Funktionen von anderen Modulen verwenden
- 20. Vermeiden Sie Videokompression bei der Auswahl von Film mit UIImagePickerController?
- 21. Vermeiden URL Zeichen mit der Zeichenzählung Count Plugin von jQuery
- 22. Vermeiden von verschachtelten Musterabgleich (möglicherweise mit möglicherweise Monade)
- 23. Vermeiden Sie Zuordnung von abstrakten Typ mit Vorlagen
- 24. Verwenden von extract() mit Flag EXTR_SKIP, um Sicherheitsprobleme zu vermeiden
- 25. Vermeiden der Formatierung von DOORS-Objekttext mit DXL
- 26. Vermeiden Sie das Herunterladen von Bildern mit Beautifulsoup und urllib.request
- 27. So vermeiden Sie Flickrings von Ansichten mit angularjs
- 28. Vermeiden Sie Zeitablauf Fehler mit Symfony Form
- 29. Rekursion vermeiden
- 30. Reactjs vermeiden Passieren von Parametern durch Verschachtelung
Danke für das Follow-up. –