Als Thunk bezeichnet man im Jargon der Softwareentwicklung der Aufruf von Code , wo Einer other Plattform oder Einem other Rahmen angehört. Bei der Umstellung von 16 auf 32 Bit beispielsweise Könnte sterben Betriebssystem ( OS / 2 , Windows NT , etc.) 16-Bit-Kodex Durch entsprechende umsetzen , wo Aufrufparameter und Adresse Realisiert, so that 16-Bit – Programm weiter used Werden Könnte. In der Mutter Softwareentwicklung ist ein Thunk z. B. Code von Managed Code ( Java Native Access oder .net)P / Invoke). Es Handelt sich um EINEN Auch Plattform Übergang (Transition), bei ihnen Aufrufkonventionen und / oder Übergabeparameter entsprechend umgesetzt Werden Müssen (die Rangierung ). Die Programmiersprache C ++ / CLI aus dem .NET Framework von Microsoft Eigen dazu konzipiert Würde, Sölch thunk in Torerfolg Rich – Zunge zu ermöglichen:
Managed-Unmanaged Aufruf
Gegegebene eigene C ++ Klasse, z. B. in einem einzelnen C ++ – Projekt oder als Dateityp Eines C ++ / CLI-Projekte, dem ein managed Code folgt :
Öffentliche Klasse CNativeClass { private : int m_i ; public : void SetValue ( int i ) { m_i = i ; } };
Managed C ++ / CLI-Klasse (Die in of this Formular von beispielsweise C # direkt instanziert Werden Kann), WELCHE sterben zuvor gezeigte nativen Klasse used:
Öffentliche Ref- Klasse CManagedClass { public : CManagedClass () { System :: Int32 i = 42 ; CNativeClass * pNativeClass = neue CNativeClass (); pNativeClass -> SetValue ( i ); // Umsetzung des Datentyps löschen pNativeClass ; } };
Unmanaged-Managed Aufruf
Verwaltete C ++ / CLI-Klasse:
Öffentliche Ref- Klasse CManagedClass { private : System :: Int32 m_i ; public : void SetValue ( int i ) { m_i = i ; // Umsetzung des Datentyps } };
Native C ++ – Klasse in einem einzelnen C ++ / CLI-Projekt. Hier sehen Sie, dass es keine Möglichkeit gibt, zu gehen, da der Code des verwalteten Codes mitten in der nicht verwalteten Klasse liegt. Das ist ein C ++ / CLI-Projekt, das die Syntax verhindert. Thunk tritts bei der gcnew auf der construction of the constructed classes aufgerafft wird:
Öffentliche Klasse CNativeClass { public : void Foo () { int i = 42 ; CManagedClass ^ pManagedClass = gcnew CManagedClass (); pManagedClass -> SetValue ( i ); } };
Literatur
- Marcus Heege: Experte C ++ / CLI . Apress Verlag, Berkeley 2007, ISBN 978-1-59059-756-9 , Kapitel 9, ab Seite 203.