<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Andreas Awenius' blog &#187; C++</title>
	<atom:link href="http://www.awenius.de/blog/category/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.awenius.de/blog</link>
	<description>Infos zu .NET und Modellierung</description>
	<lastBuildDate>Mon, 20 Jun 2011 21:15:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Der neue HelpViewer in Visual Studio 2010 Service Pack (SP) 1</title>
		<link>http://www.awenius.de/blog/2011/04/25/der-neue-helpviewer-in-visual-studio-2010-service-pack-sp-1/</link>
		<comments>http://www.awenius.de/blog/2011/04/25/der-neue-helpviewer-in-visual-studio-2010-service-pack-sp-1/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 17:57:46 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=147</guid>
		<description><![CDATA[Hallo,
wie in meinem letzten Posting beschrieben, hat Microsoft mit dem Service Pack 1 endlich wieder einen &#8220;richtigen&#8221; HelpViewer bereitgestellt.
Das war dann auch der einzige Grund, warum ich das Service Package installiert habe.
Leider scheint mir der neue HelpViewer noch nicht optiomal in Visual Studio eingebunden, weshalb ich hier die Schritte zu einer sinnvollen Konfiguration dokumentieren möchte.
Zunächst [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo,</p>
<p>wie in meinem <a href="http://www.awenius.de/blog/2011/02/20/neues-hilfesystem-fur-visual-studio-2010-mit-service-pack-1/">letzten Posting</a> beschrieben, hat Microsoft mit dem Service Pack 1 endlich wieder einen &#8220;richtigen&#8221; HelpViewer bereitgestellt.</p>
<p>Das war dann auch der einzige Grund, warum ich das Service Package installiert habe.</p>
<p>Leider scheint mir der neue HelpViewer noch nicht optiomal in Visual Studio eingebunden, weshalb ich hier die Schritte zu einer sinnvollen Konfiguration dokumentieren möchte.</p>
<p>Zunächst muss die Hilfe so konfiguriert werden, dass die &#8220;lokale Hilfe&#8221; verwendet wird. Bleibt man bei der &#8220;Onlinehilfe&#8221;, ändert sich am Verhalten nichts, d.h. wenn Hilfe angefordert wird, wird der Browser gestartet und lädt eine mehr oder weniger passende Seite von der<a href="http://msdn.microsoft.com"> msdn-Website</a>.</p>
<p>Um die lokale Hilfe auszuwählen, muss man den &#8220;Hilfebibliotheks-Manager&#8221; starten, z.B. über den Eintrag &#8220;Hilfeeinstellungen verwalten&#8221; im Menü Hilfe.</p>
<p>Dann klickt man auf &#8220;Onlinehilfe oder lokale Hilfe auswählen&#8221; und wählt anschließend &#8220;Ich möchte die lokale Hilfe verwenden&#8221;.</p>
<div id="attachment_148" class="wp-caption aligncenter" style="width: 581px"><img class="size-full wp-image-148" title="LokaleHilfeAuswaehlen" src="http://www.awenius.de/blog/wp-content/uploads/2011/04/LokaleHilfeAuswaehlen.png" alt="Lokale Hilfe auswählen" width="571" height="388" /><p class="wp-caption-text">Lokale Hilfe auswählen</p></div>
<p>Danach ist man aber noch nicht viel weiter, da (zumindest bei meiner  Installation) noch keine lokalen Inhalte für die Hilfe vorliegen. Diese  müssen nun durch Klick auf &#8220;Inhalt von Online-Speicherort installieren&#8221;  lokal installiert werden.<br />
Der Hilfebibliotheksmanager lädt dann eine Liste mit abrufbaren Inhalten  und zeigt diese in einer baumartigen Sicht an. Dort klickt man nun für  jedes gewünschte Paket auf den Link &#8216;Hinzufügen&#8217;.</p>
<p>In folgendem Beispiel wurde als letztes die Hilfe für &#8220;Visual C#&#8221; ausgewählt:</p>
<div id="attachment_151" class="wp-caption aligncenter" style="width: 581px"><img class="size-full wp-image-151" title="HilfeDateienAuswaehlen" src="http://www.awenius.de/blog/wp-content/uploads/2011/04/HilfeDateienAuswaehlen.png" alt="Auswahl einzelner Hilfepakete" width="571" height="388" /><p class="wp-caption-text">Auswahl einzelner Hilfepakete</p></div>
<p>Die Aktualisierung der geschätzten Downloadgröße nach der Aus- oder Abwahl eines Paketes dauert einen Moment. Nach einem Klick auf &#8220;Aktualisieren&#8221; werden die Hilfeinhalten dann geladen und lokal installiert.</p>
<p>Nach dem der äußerst langsamen Download (ca. 200 KBit/s) wollte ich dann ein Gefühl für die Qualität der Suche bekommen.</p>
<p>Die Eingabe des Suchbegriffes std::vector brachte als Ergebnisse &#8220;Implementing an STL based collection&#8221;, &#8220;checked_array_iterator Class&#8221; usw. Kein einziger der zwanzig Treffer hatte etwas mit der gewünschten Klasse, welche eine essentielle Klasse der C++ Standardbibliothek ist, zu tun. Wenig überraschend wurde das Ergebnis nicht besser, wenn man den Namensraum std:: wegläßt. Das ist ein sehr schwaches Ergebnis und disqualifiziert den HelpViewer als direktes Frontend für Suchen in der Hilfe.</p>
<p>Eine weitere wichtige Frage besteht darin, ob der HelpViewer effizient Hilfe für Begriffe aus einem Quelltext anzeigt. Immerhin kennt die IDE den genauen Typ jedes Tokens und hat damit alle Informationen, die benötigt werden, um eine eindeutige und korrekte Hilfe anzuzeigen.<br />
Leider wird diese Hoffnung nicht erfüllt, wie man an diesem kleinen Beispiel sieht:</p>
<p><em>if (getElements().size() != rhs-&gt;getElements().size())</em></p>
<p>getElements() liefert eine Instantiierung von std::map zurück. Die IDE &#8220;weiß&#8221; das auch, wie man an dem tooltip für das token &#8217;size&#8217; sieht oder auch den Möglichkeiten, die die &#8220;member completion&#8221; anbietet.</p>
<p>Der HelpViewer zeigt allerdings die Seite für hash_set::size() an, was nicht korrekt ist. Die Hilfe für Schlüsselwörter, die eindeutig sind (z.B. <em>auto_ptr</em>) wird korrekt angezeigt, was aber auch keine große Leistung ist.</p>
<p>Insgesamt bleibt ein enttäuschender Eindruck. Zumindest für C++-Entwickler die viel mit der C++ Standard-Bibliothek arbeiten, stellt der HelpViewer keine Verbesserung dar.</p>
<p>Viele Grüße,<br />
Andreas</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/Visual+Studio+2010" rel="tag">Visual Studio 2010</a>, <a href="http://technorati.com/tag/SP1" rel="tag">SP1</a>, <a href="http://technorati.com/tag/HelpViewer" rel="tag">HelpViewer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2011/04/25/der-neue-helpviewer-in-visual-studio-2010-service-pack-sp-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neues Hilfesystem für Visual Studio 2010 mit Service Pack 1</title>
		<link>http://www.awenius.de/blog/2011/02/20/neues-hilfesystem-fur-visual-studio-2010-mit-service-pack-1/</link>
		<comments>http://www.awenius.de/blog/2011/02/20/neues-hilfesystem-fur-visual-studio-2010-mit-service-pack-1/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 10:34:53 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=141</guid>
		<description><![CDATA[Hallo,
in einem früheren Posting habe ich mein Unverständnis ausgedrückt, dass Microsoft die Hilfe-Funktion in Visual Studio 2010 quasi abgeschafft hat. Auch in Zeiten des Internet und der Suchmaschinen ist eine gute Hilfe-Funktion wichtig.
Nachdem diese Klage ja sehr verbreitet  war, scheint Microsoft ein Einsehen zu haben, und bringt mit dem Service Pack (SP) 1 für Visual [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo,</p>
<p>in einem <a href="http://www.awenius.de/blog/2010/06/20/visual-c-2010-kann-nur-fur-das-net-framework-4-0-code-erzeugen/">früheren Posting</a> habe ich mein Unverständnis ausgedrückt, dass Microsoft die Hilfe-Funktion in Visual Studio 2010 quasi abgeschafft hat. Auch in Zeiten des Internet und der Suchmaschinen ist eine gute Hilfe-Funktion wichtig.</p>
<p>Nachdem diese Klage ja sehr verbreitet  war, scheint Microsoft ein Einsehen zu haben, und <a href="http://thirdblogfromthesun.com/2010/10/the-story-of-help-in-visual-studio-2010-part-3/">bringt mit dem Service Pack (SP) 1 für Visual Studio 2010 wieder eine richtige Hilfe-Funktion</a>.<br />
Ich bin sicher, dass der lokale Help-Viewer eine Verbesserung gegenüber der aktuellen Situation darstellt.</p>
<p>An der fehlenden Intellisense-Funktion für managed C++/CLI (managed C++), die ja auch viele Benutzer vermissen, <a href="https://connect.microsoft.com/VisualStudio/feedback/details/626825/intellisense-not-working-with-vs2010-c-cli-projects">scheint sich nichts getan zu haben</a>. Microsoft scheint hier auch einen der Nachteile einer &#8216;buy&#8217;-Lösung zu erfahren: die fehlende Möglichkeit der individuellen Anpassung. Vermutlich lässt sich der hinzugekaufte Compiler der Edison Design Group, der ja <a href="http://blogs.msdn.com/b/vcblog/archive/2009/05/27/rebuilding-intellisense.aspx">in Visual Studio 2010 für die Bereitstellung der Intellisense-Fetaures in C++ verwendet wird</a>, nicht ohne weiteres so erweitern, dass er mit den Spracherweiterungen von C++/CLI vernünftig umgeht.</p>
<p>Auf der anderen Seite muss man sagen, dass der Intellisense-Support für Standard C++ in Visual Studio 2010 viel besser ist als in älteren Versionen von Visual Studio und die Produktivität spürbar steigert. Insbesondere, dass Fehler direkt beim Tippen angezeigt werden, ist eine große Hilfe (man könnte auch sagen, dass dieses Feature langsam überfällig war).</p>
<p>Viele Grüße,<br />
Andreas</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/Visual+Studio+2010" rel="tag">Visual Studio 2010</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2011/02/20/neues-hilfesystem-fur-visual-studio-2010-mit-service-pack-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>More C++ Idioms</title>
		<link>http://www.awenius.de/blog/2010/08/02/more-c-idioms/</link>
		<comments>http://www.awenius.de/blog/2010/08/02/more-c-idioms/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 07:45:49 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=120</guid>
		<description><![CDATA[Hallo,
wer sich für C++ interessiert und seinen Horizont erweitern will sollte mal auf die Seite &#8220;More C++ Idioms&#8221; auf wikibooks.org anschauen.
Dabei kann man nicht nur bekannte C++ Pattern wie Empty Base Class Optimization oder Copy-and-swap wiederholen sondern sich auch interessante neue Ideen aneignen, wie z.B. Safe bool.
Aber Achtung: im Gegensatz zu der Angabe auf der [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo,</p>
<p>wer sich für C++ interessiert und seinen Horizont erweitern will sollte mal auf die Seite <a href="http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms">&#8220;More C++ Idioms&#8221;</a> auf <a href="http://en.wikibooks.org/wiki/Main_Page">wikibooks.org</a> anschauen.</p>
<p>Dabei kann man nicht nur bekannte C++ Pattern wie <a href="http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Empty_Base_Optimization">Empty Base Class Optimization</a> oder <a href="http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Copy-and-swap">Copy-and-swap</a> wiederholen sondern sich auch interessante neue Ideen aneignen, wie z.B. <a href="http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Safe_bool">Safe bool</a>.</p>
<p>Aber Achtung: im Gegensatz zu der Angabe auf der Seite würde ich die Anforderungen an die Leser nicht als &#8220;intermediate&#8221; sondern als &#8220;advanced&#8221; einstufen.</p>
<p>Viele Grüße,<br />
Andreas</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/C%2B%2B" rel="tag">C++</a>, <a href="http://technorati.com/tag/Pattern" rel="tag"> Pattern</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2010/08/02/more-c-idioms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual C++ 2010 kann nur für das .NET Framework 4.0 Code erzeugen</title>
		<link>http://www.awenius.de/blog/2010/06/20/visual-c-2010-kann-nur-fur-das-net-framework-4-0-code-erzeugen/</link>
		<comments>http://www.awenius.de/blog/2010/06/20/visual-c-2010-kann-nur-fur-das-net-framework-4-0-code-erzeugen/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 15:58:24 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=92</guid>
		<description><![CDATA[Erfahrungen mit Visual C++ 2010]]></description>
			<content:encoded><![CDATA[<p>Hallo,</p>
<p>vor einiger Zeit bin ich zu dem Schluss gekommen, meine Entwicklungsumgebung auf Basis von Windows 7 und Visual Studio 2010 neu aufzusetzen. Nach der Konvertierung der C++ Projekte wurde in einer Solution mit C# und C++ Projekten folgende Warnung ausgegeben:</p>
<blockquote><p>Warnung    2    Auf das Projekt &#8220;xxx&#8221; kann nicht verwiesen werden.  Das Projekt, auf das verwiesen wird, hat eine höhere Frameworkversion (&#8221;4.0&#8243;) als Ziel.</p></blockquote>
<p>In der ursprünglichen Solution war für alle Projekt das .NET Framework 2.0 als Targetversion eingetragen. Das war aus gutem Grund so, da die erstellte Anwendung für den Download über das Internet bereit gestellt wird und auf möglichst vielen Computern ohne weitere Vorbereitungen eingesetzt werden soll.</p>
<p>Eine Erklärung für die implizite Erhöhung der Targetversion für Managed C++ Projekte finden sich in <a href="http://blogs.msdn.com/b/vcblog/archive/2010/03/02/visual-studio-2010-c-project-upgrade-guide.aspx">diesem Blog-Eintrag</a> mit einem &#8220;Visual Studio 2010 C++ Project Upgrade Guide&#8221;:</p>
<blockquote><p>After conversion, managed C++ projects will target the 4.0 Framework by default.  The reason behind this design is that the VS2010 compiler cannot target Framework 2.0, 3.0 or 3.5. The VS2008 compiler must be used to target 2.0, 3.0 or 3.5. To make the converted C++ application build out of box, we decided to move the TargetFrameWorkVersion to 4.0 by default for C++ applications.</p></blockquote>
<p>Oops! Mit Visual Studio 2010 können keine Managed C++ Anwendungen für .NET Framework Versionen &lt; 4.0 erstellt werden!</p>
<p>Dagegen hilft nur eines:</p>
<blockquote><p>The VS2008 compiler must be used to target 2.0, 3.0 or 3.5.</p></blockquote>
<p>D.h. man ist gezwungen, Visual C++ 2008 zusätzlich zu installieren, wenn man Managed C++ Komponenten erstellen will, die .NET Frameworks &lt; 4.0 als Target haben. Die Änderung der Zielversion geht noch nicht mal in der IDE sondern nur durch <a href="http://msdn.microsoft.com/en-us/library/47w1hdab.aspx">Änderung der Projektdateien in einem Editor</a>.</p>
<p>Ich betrachte das als erhebliche Einschränkung, da man in diesem Fall Visual Studio 2008 zusätzlich installieren (und ggf. kaufen) muss, sondern dann auch die <a href="http://msdn.microsoft.com/en-us/library/dd465215.aspx">schönen neuen C++ Features</a> des Compilers nicht mehr nutzen kann.</p>
<p>Generell habe ich den Eindruck, dass Microsoft sich mit Visual Studio 2010 etwas übernommen hat, und irgendwann einfach die Produktfreigabe beschlossen hat, obwohl es noch viele Probleme und Einschränkungen gab (z.B. wie im obigen Blog-Eintrag beschrieben, oder das <a href="https://connect.microsoft.com/VisualStudio/feedback/details/501921/c-cli-intellisense">Fehlen von Intellisense für Managed C++ </a>oder die <a href="http://stackoverflow.com/questions/2659700/visual-studio-2010-blurry-font">unscharfe Erscheinung der Default-Fonts auf manchen Betriebsystemen </a>oder der erhöhte Speicherbedarf  oder das aus nicht nachvollziehbaren Gründen umgestellte Hilfesystem, das jetzt eigentlich <a href="http://www.itwriting.com/blog/2247-visual-studio-2010-testers-unhappy-with-help.html">unbrauchbar ist</a>.).</p>
<p>Auf der Haben-Seite steht für mich ganz klar der neu implementierte Support für Intellisense (bei native C++ Projekten). Das funktioniert jetzt viel besser als mit Visual C++ und verbessert die Produktivität spürbar.</p>
<p>Viele Grüße,<br />
Andreas</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/Visual+C%2B%2B" rel="tag">Visual C++</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2010/06/20/visual-c-2010-kann-nur-fur-das-net-framework-4-0-code-erzeugen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wie kann man native Methoden in managed C++ Klassen nutzen?</title>
		<link>http://www.awenius.de/blog/2009/10/04/wie-kann-man-native-methoden-in-managed-c-klassen-nutzen/</link>
		<comments>http://www.awenius.de/blog/2009/10/04/wie-kann-man-native-methoden-in-managed-c-klassen-nutzen/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 19:17:04 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=66</guid>
		<description><![CDATA[Hallo,
Microsoft hat mit der Einführung des .NET-Frameworks auch C++-Erweiterungen (C++/CLI) definiert, mit denen vorhandener C++ source code für .NET-Anwendungen verfügbar gemacht werden kann.
Die Intention dabei war die Steigerung der Akzeptanz des .NET-Frameworks, da es relativ einfach gemacht wird, bereits vorhandenen C++ code in .NET-Anwendungen zu integrieren. Meiner persönlichen Erfahrung nach geht das sehr gut, d.h. [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo,</p>
<p>Microsoft hat mit der Einführung des <a href="http://de.wikipedia.org/wiki/.NET">.NET</a>-Frameworks auch C++-Erweiterungen (<a href="http://de.wikipedia.org/wiki/C%2B%2B/CLI">C++/CLI</a>) definiert, mit denen vorhandener C++ source code für .NET-Anwendungen verfügbar gemacht werden kann.</p>
<p>Die Intention dabei war die Steigerung der Akzeptanz des .NET-Frameworks, da es relativ einfach gemacht wird, bereits vorhandenen C++ code in .NET-Anwendungen zu integrieren. Meiner persönlichen Erfahrung nach geht das sehr gut, d.h. es ist ziemlich einfach vorhanden C++ code mit C++/CLI .NET-tauglich zu machen und die entstandenen <a href="http://de.wikipedia.org/wiki/.NET#Assemblys">Assemblys</a> haben keine nennenswerten Einschränkungen (abgesehen davon, dass sie nur für die Plattform geeignet sind, für die der native code kompiliert wurde).</p>
<p>Der übliche Weg besteht darin eine neue Assembly zu erstellen, die C++/CLI Klassen (und ggf. native Klassen) enthält. Diese Klassen rufen dann den eigentlichen legacy code, typischerweise in bereits vorhandenen Libraries/DLLs.</p>
<p>Folgende Frage stellt sich bei der Erstellung eines Managed C++ Wrappers um vorhanden C++ code schnell:</p>
<p>Wie kann ich innerhalb des .NET-Wrappers native Datenstrukturen zwischen managed Klassen austauschen?</p>
<p>Dies ist grundsätzlich nicht ohne weiteres möglich, da in der öffentlichen Schnittstelle nur CLR-kompatible Datentypen verwendet werden dürfen (ansonsten könnten nicht alle Elemente der Schnittstelle von anderen .NET kompatiblen Komponenten konsumiert werden).</p>
<p>Es ist allerdings möglich, private Methoden zu definieren, die nicht CLR-konforme Datentypen konsumieren oder zurückgeben dürfen. Damit solche Methoden von anderen Klassen in der C++/CLI Wrapper-Assembly gerufen werden dürfen, müsste man alle diese Klassen als <code>friend</code> definieren, was eine etwas unbefriedigende Lösung ist.</p>
<p>Diese Überlegung führt aber zur optimalen Lösung: die Deklaration der entsprechenden Methoden als <code>public private</code>.<code> public private</code> ist in C++/CLI die Entsprechung zu <code>internal</code> in C# und bedeutet &#8220;sichtbar innerhalb der Assembly&#8221;.<br />
Da die entsprechenden Methoden nur von den C++-Klassen innerhalb der Wrapper-Assembly gerufen werden, gibt es keinen Grund sie zu verbieten (was der Compiler dann auch nicht macht).</p>
<p>Viele Grüße,<br />
Andreas</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/.NET" rel="tag">.NET</a>, <a href="http://technorati.com/tag/Managed+C%2B%2B" rel="tag">Managed C++</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2009/10/04/wie-kann-man-native-methoden-in-managed-c-klassen-nutzen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Destruktor nicht gerufen in mixed mode C++ Anwendungen mit Visual C++ 2008</title>
		<link>http://www.awenius.de/blog/2009/02/09/destruktor-nicht-gerufen-in-mixed-mode-c-anwendungen-mit-visual-c-2008/</link>
		<comments>http://www.awenius.de/blog/2009/02/09/destruktor-nicht-gerufen-in-mixed-mode-c-anwendungen-mit-visual-c-2008/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 07:08:31 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=56</guid>
		<description><![CDATA[Hallo,
in C++ gibt es ja das Resource Aquisition Is Initialization (RAII) pattern. Der Kern dieses Patterns besteht darin, dass ein Objekt bereits bei der Konstruktion die Ownership für eine Resource übernimmt und diese Resource bei seiner Zerstörung wieder frei gibt. Man wendet dieses pattern an, um Resourcen wie allokierten Speicher oder file handles sicher freizugeben. [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo,</p>
<p>in C++ gibt es ja das <a href="http://en.wikipedia.org/wiki/RAII">Resource Aquisition Is Initialization</a> (RAII) pattern. Der Kern dieses Patterns besteht darin, dass ein Objekt bereits bei der Konstruktion die Ownership für eine Resource übernimmt und diese Resource bei seiner Zerstörung wieder frei gibt. Man wendet dieses pattern an, um Resourcen wie allokierten Speicher oder file handles sicher freizugeben. Dabei mancht man sich zu nutze, dass in C++ der Destruktor eines Objektes deterministisch aufgerufen wird, z. B. auch im Falle eine exception.</p>
<p>Dieses pattern ist sehr wichtig, um zuverlässige und robuste Software in C++ zu schreiben und ich nutze es regelmäßig. Nun hatte ich vor einiger Zeit in einem der Unittests in der Software, die ich für mein Unternehmen <a href="http://www.empowertec.de/">EmPowerTec</a> schreibe, einen seltsamen Fehler in einem Unittest. Nach einer längeren Debugging-Session sah es so aus, als würden die Destruktoren für Objekte die in einer Methode auf dem Stack angelegt waren, beim Verlassen der Methode nicht mehr gerufen. Ein solches Verhalten führt mit Sicherheit zu Fehlern, wenn das RAII Pattern genutzt wird. Zunächst war ich darüber verblüfft, da ich mir nicht vorstellen konnte, dass ein derartig fundamentales Verhalten vom Microsoft C++ Compiler nicht richtig implementiert war. Tatsächlich war das aber der Fall, wie in folgendem Knowledge Base Eintrag beschrieben:</p>
<p><a href="http://social.msdn.microsoft.com/forums/en-US/vclanguage/thread/8324a598-ad05-40e1-a271-6f64ce3b6008">http://social.msdn.microsoft.com/forums/en-US/vclanguage/thread/8324a598-ad05-40e1-a271-6f64ce3b6008</a></p>
<p>Wie man dem Thread entnehmen kann, tritt das Problem auf, wenn man von einer C++/CLI Library eine native C++ library aufruft und diese mit inkompatiblen Einstellungen für das Exception handling übersetzt hat.</p>
<p><em>Und die Moral von der Geschicht,<br />
Trau&#8217; keinem Compiler nicht,</em></p>
<p><em>Unittests sollst Du machen,<br />
Sonst hast Du nichts zu lachen</em></p>
<p>Viele Grüße,<br />
Andreas</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/Microsoft+Visual+C%2B%2B" rel="tag">Microsoft Visual C++</a>, <a href="http://technorati.com/tag/RAII" rel="tag">RAII</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2009/02/09/destruktor-nicht-gerufen-in-mixed-mode-c-anwendungen-mit-visual-c-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

