<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Thunk</id>
	<title>Thunk - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Thunk"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Thunk&amp;action=history"/>
	<updated>2026-05-28T00:37:45Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Thunk&amp;diff=2307450&amp;oldid=prev</id>
		<title>imported&gt;Filzstift: /* top */BKL-fix, replaced: .NET → .NET mit AWB</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Thunk&amp;diff=2307450&amp;oldid=prev"/>
		<updated>2022-05-31T07:46:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;top: &lt;/span&gt;BKL-fix, replaced: &lt;a href=&quot;/index.php?title=.NET&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;.NET (Seite nicht vorhanden)&quot;&gt;.NET&lt;/a&gt; → &lt;a href=&quot;/index.php/.Net-Framework&quot; title=&quot;.Net-Framework&quot;&gt;.NET&lt;/a&gt; mit &lt;a href=&quot;/index.php/Wikipedia:AWB&quot; class=&quot;mw-redirect&quot; title=&quot;Wikipedia:AWB&quot;&gt;AWB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Als &amp;#039;&amp;#039;&amp;#039;Thunk&amp;#039;&amp;#039;&amp;#039; bezeichnet man im Jargon der [[Softwareentwicklung]] den Aufruf von Code, der einer anderen Plattform oder einem anderen [[Framework]] angehört. Bei der Umstellung von 16 auf 32 Bit beispielsweise konnten die Betriebssysteme ([[OS/2]], [[Windows NT]] etc.) 16-Bit-Code durch entsprechendes Umsetzen der Aufrufparameter und Adressen realisieren, so dass 16-Bit-Programme weiter verwendet werden konnten. In der modernen Softwareentwicklung ist ein Thunk z.&amp;amp;nbsp;B. der Aufruf von nativem Code aus [[Managed Code]] heraus und umgekehrt (siehe [[Java Native Access]] oder [[.Net-Framework]]s P/Invoke). Es handelt sich also um einen Plattform-Übergang (Transition), bei dem die Aufrufkonventionen und/oder Übergabeparameter entsprechend umgesetzt werden müssen ([[Marshalling]]). Die Programmiersprache [[C++/CLI]] aus dem .NET-Framework von [[Microsoft]] wurde eigens dazu konzipiert, solche Thunks in beide Richtungen zu ermöglichen:&lt;br /&gt;
&lt;br /&gt;
== Managed-Unmanaged Aufruf ==&lt;br /&gt;
&lt;br /&gt;
Gegeben sei eine native C++ Klasse, z.&amp;amp;nbsp;B. in einem C++ Projekt oder als Bestandteil eines C++/CLI Projekts, die nachfolgend von &amp;#039;&amp;#039;managed code&amp;#039;&amp;#039; verwendet wird:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
public class CNativeClass&lt;br /&gt;
{&lt;br /&gt;
  private:&lt;br /&gt;
    int m_i;&lt;br /&gt;
  public:&lt;br /&gt;
    void SetValue( int i )&lt;br /&gt;
    {&lt;br /&gt;
      m_i = i;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Managed C++/CLI Klasse (die in dieser Form von beispielsweise C# direkt instanziert werden kann), welche die zuvor gezeigte native Klasse verwendet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
public ref class CManagedClass&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    CManagedClass()&lt;br /&gt;
    {&lt;br /&gt;
      System::Int32 i = 42;&lt;br /&gt;
      CNativeClass* pNativeClass = new CNativeClass();&lt;br /&gt;
      pNativeClass-&amp;gt;SetValue( i );//Umsetzung des Datentyps&lt;br /&gt;
      delete pNativeClass;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unmanaged-Managed Aufruf ==&lt;br /&gt;
&lt;br /&gt;
Managed C++/CLI Klasse:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
public ref class CManagedClass&lt;br /&gt;
{&lt;br /&gt;
  private:&lt;br /&gt;
    System::Int32 m_i;&lt;br /&gt;
  public:&lt;br /&gt;
    void SetValue( int i )&lt;br /&gt;
    {&lt;br /&gt;
      m_i = i;//Umsetzung des Datentyps&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Native C++ Klasse in einem C++/CLI Projekt. Hier ist zu sehen, dass auch der umgekehrte Weg möglich ist, nämlich das Instanzieren von managed code innerhalb einer unmanaged Klasse. Bedingung ist jedoch, dass es sich um ein C++/CLI Projekt handelt, so dass der Compiler die entsprechende Syntax versteht. Der Thunk tritt bereits bei der gcnew Anweisung auf, da hier der Konstruktor der managed Klasse aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
public class CNativeClass&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    void Foo()&lt;br /&gt;
    {&lt;br /&gt;
      int i = 42;&lt;br /&gt;
      CManagedClass^ pManagedClass = gcnew CManagedClass();&lt;br /&gt;
      pManagedClass-&amp;gt;SetValue( i );&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Marcus Heege: &amp;#039;&amp;#039;Expert C++/CLI&amp;#039;&amp;#039;. Apress Verlag, Berkeley 2007, ISBN 978-1-59059-756-9, Kapitel 9, ab Seite 203.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Filzstift</name></author>
	</entry>
</feed>