thunk



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.