<?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</title>
	<atom:link href="http://www.awenius.de/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.awenius.de/blog</link>
	<description>Infos zu .NET und Modellierung</description>
	<lastBuildDate>Mon, 16 Aug 2010 19:38:43 +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>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>Einschränkungen beim Debuggen mit mixed moded Anwendungen im 64-Bit Modus</title>
		<link>http://www.awenius.de/blog/2010/06/27/einschrankungen-beim-debuggen-mit-mixed-moded-anwendungen-im-64-bit-modus/</link>
		<comments>http://www.awenius.de/blog/2010/06/27/einschrankungen-beim-debuggen-mit-mixed-moded-anwendungen-im-64-bit-modus/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 19:57:04 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=103</guid>
		<description><![CDATA[Hallo,
kürzlich bekam ich vom Visual Studio 2010 Debugger beim Starten einer Anwendung folgende Fehlermeldung:
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
Microsoft Visual Studio
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
Fehler beim Ausführen des Projekts: Das Programm &#8220;&#8230;\unittest\bin\Debug\unittest.exe&#8221; kann nicht gestartet werden.
Das Debuggen im gemischten Modus für x64-Prozesse wird nur bei Verwendung von Microsoft .NET Framework vor Version 4 unterstützt.
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
OK   Hilfe
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
Die Konstellation war dabei folgende:

Ein reines C#-Programm referenziert eine Assembly, [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo,</p>
<p>kürzlich bekam ich vom Visual Studio 2010 Debugger beim Starten einer Anwendung folgende Fehlermeldung:</p>
<blockquote><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Microsoft Visual Studio<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Fehler beim Ausführen des Projekts: Das Programm &#8220;&#8230;\unittest\bin\Debug\unittest.exe&#8221; kann nicht gestartet werden.</p>
<p>Das Debuggen im gemischten Modus für x64-Prozesse wird nur bei Verwendung von Microsoft .NET Framework vor Version 4 unterstützt.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
OK   Hilfe<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p></blockquote>
<p>Die Konstellation war dabei folgende:</p>
<ul>
<li>Ein reines C#-Programm referenziert eine Assembly, die mit managed C++ erstellt war. Diese Assembly bindet auch native code ein (mixed mode).</li>
<li>Als Compiler wurde der vc90 verwendet.</li>
<li>Als Targetversion für das .NET-Framework wurde für alle Komponenten 2.0 verwendet.</li>
<li>Alle Anwendungen waren als 32-Bit-Anwendungen in Visual Studio 2008 erstellt und wurden von Visual Studio 2010 zur Version 2010 konvertiert.</li>
</ul>
<p>Für die in C# erstellte (reine .NET) Anwendung war in den Einstellungen als Zielplattform &#8220;Any CPU&#8221; eingetragen, wie bereits in der Vorgängerversion:</p>
<p><img class="alignleft size-full wp-image-107" title="AnyCPU" src="http://www.awenius.de/blog/wp-content/uploads/2010/06/AnyCPU2.png" alt="AnyCPU" width="387" height="36" /></p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">Nach der Umstellung auf X86 konnte die Anwendung erfolgreich im Debugger gestartet werden.</p>
<p><img class="alignleft size-full wp-image-105" title="X86" src="http://www.awenius.de/blog/wp-content/uploads/2010/06/X86.png" alt="X86" width="383" height="34" /></p>
<p>Die Fehlermeldung ist grundsätzlich ziemlich irreführend. Alle beteiligten Komponenten waren ja explizit für .NET 2.0 konfiguriert.</p>
<p>Oder ist sie gar falsch?</p>
<p>Auf <a href="http://msdn.microsoft.com/de-de/library/ms184681.aspx">dieser Seite</a> findet man folgendes Zitat:</p>
<blockquote><p><span id="xn29_db15abbc0f57576bc6cfd4a341858a19">Debugging  im gemischten Modus (Aufrufe von systemeigenem Code bis zu verwalteten  Codes, oder umgekehrt) wird für x64-Prozesse unterstützt, wenn der  verwaltete Code Microsoft .NET Framework, Version 4 oder höher,  verwendet.</span></p>
<p><span id="xn30_02695e6e38b9f206b8b6137aa93f0c7b">Debugging im gemischten Modus wird nicht für  IA64-Prozesse oder x64-Prozesse unterstützt, die frühere .NET  Framework-Versionen als 4 verwenden.</span></p></blockquote>
<p><span>was ja ein klarer Gegensatz zur oben zitieren Fehlermeldung ist.</span></p>
<p><span>Grundsätzlich ist es schon etwas unschön, wenn man für die reine .NET-Komponent nicht mehr &#8220;Any CPU&#8221; wählen kann, nur weil sie eine mixed mode Assembly nutzt, die im 32-Bit Modus erstellt wurde.</span></p>
<p><span>Eine Rolle könnte auch spielen, dass ich inzwischen Windows 7 x64 benutze, während ich zuvor Windows XP X86 verwendet habe.<br />
</span></p>
<p><span>Viele Grüße,<br />
Andreas<br />
</span></p>
<p><span><p>Technorati Tags: <a href="http://technorati.com/tag/Visual+Studio" rel="tag">Visual Studio</a>, <a href="http://technorati.com/tag/mixed+mode" rel="tag">mixed mode</a>, <a href="http://technorati.com/tag/debugging" rel="tag">debugging</a></p><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2010/06/27/einschrankungen-beim-debuggen-mit-mixed-moded-anwendungen-im-64-bit-modus/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>Google vs. Bing</title>
		<link>http://www.awenius.de/blog/2010/05/08/google-vs-bing/</link>
		<comments>http://www.awenius.de/blog/2010/05/08/google-vs-bing/#comments</comments>
		<pubDate>Sat, 08 May 2010 09:47:22 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Sonstiges]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=84</guid>
		<description><![CDATA[Hallo zusammen,
ich benutzt ja wie die meisten Deutschen in der Regel Google als Suchmaschine. Nun hat ja Microsofts Suchmaschine bing inzwischen einen recht guten Ruf.
Eine kleine Erfahrung hierzu:
Ich arbeite zur Zeit in einem XBRL-Projekt und wollte mir in diesem Zusammenhang einen Eindruck über die XBRL Dimensions Conformance Suite machen. Da die Suche bei Google nicht [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo zusammen,</p>
<p>ich benutzt ja wie die <a href="http://www.kanzelbahn.de/Blog/2007/09/01/suchmaschinen_nutzung_in_europa_und_asien.html">meisten Deutschen</a> in der Regel Google als Suchmaschine. Nun hat ja Microsofts Suchmaschine <a href="http://www.bing.com/">bing</a> inzwischen einen recht guten Ruf.</p>
<p>Eine kleine Erfahrung hierzu:<br />
Ich arbeite zur Zeit in einem <a href="http://xbrl.org/frontend.aspx?clk=LK&amp;val=20">XBRL</a>-Projekt und wollte mir in diesem Zusammenhang einen Eindruck über die <a href="http://www.xbrl.org/Specification/XDT-REC-2006-09-18.htm">XBRL Dimensions</a> Conformance Suite machen. Da die Suche bei Google nicht unmittelbar erfolgreich war, habe ich bing probiert. Hier zum Vergleich die Trefferlisten (die bei Ihnen möglicherweise anders aussehen könnten, falls Google sich Ihre Interessen aufgrund der früher angeklickten Ergebnisse gemerkt hat):</p>
<p>Google:<br />
<a href="http://www.xbrl-ru.ru/docs/normative/XDT-CONF-CR4-2009-10-06.rtf"><span id="main" style="visibility: visible;"><span id="search" style="visibility: visible;"><span><cite><strong>http://www.xbrl</strong>-ru.ru/docs/normative/XDT-CONF-CR4-2009-10-06.rtf</cite></span></span></span></a><br />
<a href="http://www.xbrl.org/2005/XBRL-CONF-CR1-2005-04-25.htm">http://www.xbrl.org/2005/XBRL-CONF-CR1-2005-04-25.htm</a><br />
<a href="http://www.xbrl.org/Specification/XDT-REC-2006-09-18.htm">http://www.xbrl.org/Specification/XDT-REC-2006-09-18.htm<br />
</a></p>
<p>Der erste Link verweist auf ein RTF-Dokument auf einem Server der russischen XBRL-Vereinigung.<br />
Der zweite Link verweist auf die XBRL (Standard, nicht Dimensions) Conformance Suite, zudem noch auf eine ältere, obsolete Version.<br />
Der dritte Link verweist auf die Spezifikation von XBRL Dimensions, in der man dann aber auch keinen weiteren, konkreten Hinweis auf die Conformance Suite für XBRL Dimensions findet.<br />
Auch die weiteren Treffer auf der ersten Seite führen einen nicht zum Ziel.</p>
<p>Bing:<br />
<a href="http://www.xbrl.org/2006/XDT-CONF-CR3-2006-06-06.htm">http://www.xbrl.org/2006/XDT-CONF-CR3-2006-06-06.htm</a></p>
<p>Und dieser Link ist gleich ein Volltreffer, es ist genau die Übersichtsseite zur XBRL Dimensions Conformance Suite, die gleich am Anfang auch den gesuchten Download-Link zum zip-Archiv mit den Dateien enthält.</p>
<p>Also bezogen auf diese Anfrage klarer Vorteil für bing!</p>
<p>Viele Grüße,<br />
Andreas</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/google" rel="tag">google</a>, <a href="http://technorati.com/tag/bing" rel="tag">bing</a>, <a href="http://technorati.com/tag/Suchmaschinen" rel="tag">Suchmaschinen</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2010/05/08/google-vs-bing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DoDragDrop und SelectedNode in WinForms TreeViews</title>
		<link>http://www.awenius.de/blog/2009/11/30/dodragdrop-und-selectednode-in-winforms-treeviews/</link>
		<comments>http://www.awenius.de/blog/2009/11/30/dodragdrop-und-selectednode-in-winforms-treeviews/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 21:59:41 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=67</guid>
		<description><![CDATA[Hallo,
kürzlich fiel mir ein überraschender Effekt im Zusammenhang mit WinForms TreeViews und drag and drop auf. Fall man im MouseDown-Event eine DragDrop-Operation mit der Methode DoDragDrop() startet, wird der selektierte Knoten nicht auf den angeklickten Knoten gesetzt.
In folgendem Beispiel wurde der Knoten &#8220;BasicActivities&#8221; angeklickt und damit zum selected node. Anschließend wurde der Knoten ActivityFinalNode angeklickt. [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo,</p>
<p>kürzlich fiel mir ein überraschender Effekt im Zusammenhang mit WinForms TreeViews und drag and drop auf. Fall man im MouseDown-Event eine DragDrop-Operation mit der Methode DoDragDrop() startet, wird der selektierte Knoten nicht auf den angeklickten Knoten gesetzt.</p>
<p>In folgendem Beispiel wurde der Knoten &#8220;BasicActivities&#8221; angeklickt und damit zum selected node. Anschließend wurde der Knoten ActivityFinalNode angeklickt. Der Focus-ähnliche Rahmen um den Knoten &#8220;BasicActivities&#8221; blieb aber erhalten:</p>
<p><img src="http://www.awenius.de/blog/wp-content/uploads/2009/11/SelektierterKnotenFalsch.png" alt="SelektierterKnotenFalsch" title="SelektierterKnotenFalsch" width="314" height="208" class="aligncenter size-full wp-image-68" /></p>
<p>Das hat zur Konsequenz, dass der zuvor selektierte Knoten &#8220;BasicActivities&#8221; nach einer anschließenden Mousebewegung <strong>ohne click</strong> wieder selektiert wird. </p>
<p>Dieses Verhalten tritt nicht auf, wenn der Aufruf der Methode DoDragDrop() unterbleibt.</p>
<p>Wenn man den Knoten im MouseDown-Event explizit selektiert (wie <a href="http://www.syncfusion.com/FAQ/windowsforms/faq_c91c.aspx#q807q">hier</a> beschrieben), tritt dieser Effekt nicht auf und das TreeView verhält sich wie gewohnt.</p>
<pre lang="C#" line="1">
theTreeView.SelectedNode = nodeAt;
DoDragDrop(nodeAt.TheClass, DragDropEffects.Copy);
</pre>
<p>Viele Grüße,<br />
Andreas<br /><p>Technorati Tags: <a href="http://technorati.com/tag/WinForms" rel="tag">WinForms</a>, <a href="http://technorati.com/tag/Drag+and+Drop" rel="tag">Drag and Drop</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2009/11/30/dodragdrop-und-selectednode-in-winforms-treeviews/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>Diplom-Informatiker(FH) verdienen mehr als Informatiker von der Universität?</title>
		<link>http://www.awenius.de/blog/2009/08/03/diplom-informatikerfh-verdienen-mehr-als-informatiker-von-der-universitat/</link>
		<comments>http://www.awenius.de/blog/2009/08/03/diplom-informatikerfh-verdienen-mehr-als-informatiker-von-der-universitat/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 07:41:33 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Sonstiges]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=65</guid>
		<description><![CDATA[Hallo,
die  &#8220;Beruf und Karriere&#8221;-Beilage der Süddeutschen Zeitung vom 1./2.08.09 enthielt einen interssanten Artikel mit dem Titel &#8220;Uni-Abgänger verdienen mehr als FH-Absolventen&#8221;.
Darin wurden die Ergebnisse einer Befragung von mehr 5000 Absolventen des Jahrgangs 1997 veröffentlicht. Im Durchschnitt verdienten Uni-Abgänger 10 Jahre nach Ende ihres Studiums 64.300,00 EUR während FH-Absolventen 59.400,00 EUR verdienten.
Soweit entspricht das etwa dem [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo,</p>
<p>die  &#8220;Beruf und Karriere&#8221;-Beilage der <a href="http://www.sueddeutsche.de/">Süddeutschen Zeitung</a> vom 1./2.08.09 enthielt einen interssanten Artikel mit dem Titel &#8220;Uni-Abgänger verdienen mehr als FH-Absolventen&#8221;.</p>
<p>Darin wurden die Ergebnisse einer Befragung von mehr 5000 Absolventen des Jahrgangs 1997 veröffentlicht. Im Durchschnitt verdienten Uni-Abgänger 10 Jahre nach Ende ihres Studiums 64.300,00 EUR während FH-Absolventen 59.400,00 EUR verdienten.</p>
<p>Soweit entspricht das etwa dem was man erwarten würde.</p>
<p>Überraschenderweise scheint das für die Informatik nicht zu gelten, hier verdienten Uni-Abgänger im Schnitt 70.800,00 EUR und FH-Abgänger 77.300,00 EUR. Das sind rund 10% mehr!</p>
<p>Ich selbst habe ebenfalls trotz allgemeiner Hochschulreife an der FH studiert und war mit dieser Entscheidung sehr zufrieden. Ich habe in den beiden Praktikumsemestern in zwei verschiedenen Unternehmen gearbeitet und auch die Diplomarbeit in einem (dritten) Unternehmen geschrieben. Dabei habe ich sehr viel gelernt, wertvolle Kontakte geknüpft und auch meine erste Stelle nach dem Studium gefunden.</p>
<p>Interessehalber noch die Ergebnisse für die anderen Fächer (erstgenannt die Gehälter der Uni-Absolventen):</p>
<p>Bauingenieur: 56.100,00 gegenüber 49.700,00<br />
Elektrotechnik: 70.900,00 gegenüber 64.200,00<br />
Maschinenbau: 76.200,00 gegenüber 62.900,00</p>
<p>Auffällig ist auch der große Abstand bei den Maschinenbauern.</p>
<p>Viele Grüße,<br />
Andreas</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/Gehalt" rel="tag">Gehalt</a>, <a href="http://technorati.com/tag/Uni" rel="tag">Uni</a>, <a href="http://technorati.com/tag/FH" rel="tag">FH</a>, <a href="http://technorati.com/tag/Informatik" rel="tag">Informatik</a>, <a href="http://technorati.com/tag/Elektrotechnik" rel="tag">Elektrotechnik</a>, <a href="http://technorati.com/tag/Maschinenbau" rel="tag">Maschinenbau</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2009/08/03/diplom-informatikerfh-verdienen-mehr-als-informatiker-von-der-universitat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entwicklung von C++ COM-Komponenten mit Visual Studio als eingeschränkter Benutzer</title>
		<link>http://www.awenius.de/blog/2009/07/20/entwicklung-von-c-com-komponenten-mit-visual-studio-als-eingeschrankter-benutzer/</link>
		<comments>http://www.awenius.de/blog/2009/07/20/entwicklung-von-c-com-komponenten-mit-visual-studio-als-eingeschrankter-benutzer/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 06:51:55 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=64</guid>
		<description><![CDATA[Hallo,
es gibt eine klare Empfehlung für die tägliche Arbeit auf einem Computer mit Windows XP ein Konto mit eingeschränkten Rechten zu verwenden. Der Hauptgrund ist die damit stark reduzierte Wahrscheinlichkeit einem Virus oder anderer Malware zum Opfer zu fallen.
Für Entwickler gibt es noch einen weiteren, wesentlichen Grund für die Verwendung eines Kontos mit eingeschränkten Rechten: [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo,</p>
<p>es gibt eine klare Empfehlung für die tägliche Arbeit auf einem Computer mit Windows XP ein Konto mit eingeschränkten Rechten zu verwenden. Der Hauptgrund ist die damit stark reduzierte Wahrscheinlichkeit einem Virus oder anderer <a href="http://de.wikipedia.org/wiki/Malware">Malware</a> zum Opfer zu fallen.</p>
<p>Für Entwickler gibt es noch einen weiteren, wesentlichen Grund für die Verwendung eines Kontos mit eingeschränkten Rechten: sie testen damit automatisch, ob die entwickelte Software auch mit eingeschränkten Rechten funktioniert &#8211; was gut geschriebene Software machen sollte.</p>
<p>Dummerweise bekommt man bei diesem vorbildlichen Vorgehen ein Problem, wenn man eine ATL COM Komponente erzeugt. Für diesen Projekttyp aktiviert Visual Studio die <a href="http://msdn.microsoft.com/de-de/library/024awkd1.aspx">Linker Option &#8220;Ausgabe registrieren&#8221;</a>.<br />
Damit wird nach erfolgreichem Linken der Komponente regsvr32 /s aufgerufen, um die frisch erstellte Library zu registrieren. Dieser Aufruf scheitert bei Verwendung eines Kontos mit eingeschränkten Rechten da die Registrierung von COM-Komponenten Administrator-Rechte erfordert:</p>
<p><code><br />
Project : error PRJ0050: Fehler beim Registrieren der Ausgabe. Vergewissern Sie sich, dass Sie über die entsprechenden Berechtigungen zum Ändern der Registrierung verfügen.<br />
</code></p>
<p>Für solche Fälle ist die Verwendung des Kommandos <a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/runas.mspx?mfr=true">runas</a> eine naheliegende Option aber leider hat man auf die von Visual Studio erzeugte Programmzeile für den Aufruf von regsvr32 keinen Einfluss, diese ist nämlich Teil der <a href="http://msdn.microsoft.com/de-de/library/microsoft.visualstudio.vcprojectengine.vclinkertool.registeroutput.aspx">Visual Studio Programmierschnittstelle</a> und damit nicht direkt zugänglich.</p>
<p>Eine einfache Lösung besteht darin, die oben genannte Linker-Option &#8220;Ausgabe registrieren&#8221; zu deaktivieren und ein eigenes &#8220;Postbuildereigenis&#8221; für das Projekt zu definieren. Dieses könnte z.B. so aussehen:</p>
<p><code><br />
runas /user:administrator /savecred "regsvr32 /s $(TargetPath)"<br />
</code></p>
<p>Damit das funktioniert muss man einmal den Befehl in einem Kommandofenster eingeben und dann nach der Aufforderung das Administrator-Password eingeben. Bei jedem weiteren Aufruf mit /savecred wird dann das zuletzt verwendete Passwort automatisch verwendet. Damit ist vermieden, dass das Administrator-Password im Klartext in einer Visual Studio Projektdatei steht, was eine erhebliche Sicherheitslücke darstellen würde.</p>
<p>Falls man das gemerkte Passwort später wieder löschen möchte: Systemsteuerung/Benutzerkonten/Eigene Netzwerkkennwörter verwalten.</p>
<p>Viele Grüße,<br />
Andreas</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/Visual+Studio" rel="tag">Visual Studio</a>, <a href="http://technorati.com/tag/COM" rel="tag"> COM</a>, <a href="http://technorati.com/tag/ATL" rel="tag"> ATL</a>, <a href="http://technorati.com/tag/Registry" rel="tag">Registry</a>, <a href="http://technorati.com/tag/Eingeschr%C3%A4nkter+Benutzer" rel="tag">Eingeschränkter Benutzer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2009/07/20/entwicklung-von-c-com-komponenten-mit-visual-studio-als-eingeschrankter-benutzer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bitte aktivieren Sie JavaScript&#8230;wofür eigentlich?</title>
		<link>http://www.awenius.de/blog/2009/06/23/bitte-aktivieren-sie-javascriptwofur-eigentlich/</link>
		<comments>http://www.awenius.de/blog/2009/06/23/bitte-aktivieren-sie-javascriptwofur-eigentlich/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 19:31:21 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Sonstiges]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=62</guid>
		<description><![CDATA[Hallo,
nachdem mich das Finanzamt an die Abgabe der Steuererklärung erinnert hat, habe ich mein Wiso Sparbuch 2009 gestartet und natürlich die schöne Suche nach Aktualisierungen gestartet.
Nach kurzer Zeit erscheint die Meldung:
Sie haben JavaScript deaktiviert. Damit sind wichtige Funktionen dieses  Programms nicht verfügbar.
Weitere Informationen zu JavaScript und wie Sie  JavaScript aktivieren finden Sie hier.
Bitte [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo,</p>
<p>nachdem mich das Finanzamt an die Abgabe der Steuererklärung erinnert hat, habe ich mein Wiso Sparbuch 2009 gestartet und natürlich die schöne Suche nach Aktualisierungen gestartet.<br />
Nach kurzer Zeit erscheint die Meldung:</p>
<blockquote><p>Sie haben JavaScript deaktiviert. Damit sind wichtige Funktionen dieses  Programms nicht verfügbar.<br />
Weitere Informationen zu JavaScript und wie Sie  JavaScript aktivieren finden Sie hier.</p>
<p>Bitte aktivieren Sie JavaScript  und starten das Programm dann erneut.</p></blockquote>
<p>Was soll denn bitte diese Meldung? Ich habe eine FAT Client Anwendung zur Abgabe meiner Steuererklärung gestartet. Wo und wie soll ich denn nun JavaScript aktivieren?<br />
(Wer nun denkt, in obiger Meldung wäre &#8220;hier&#8221; ein Link, den muss ich enttäuschen)</p>
<p>Hallo Ihr Buhl-Programmierer! Schon mal daran gedacht, dass Ihre Software vielleicht von Personen eingesetzt wird, die mit einer solchen Meldung nicht zurechtkommen? Oder von Personen, die keine Lust haben ihren PC in einen <a href="http://de.wikipedia.org/wiki/Bot">Bot</a> voller <a href="http://de.wikipedia.org/wiki/Malware">Malware</a> zu transformieren?</p>
<p>Um dem Ganzen noch die Krone aufzusetzen, startet beim Klick auf den Link &#8220;Support&#8221; in obigem Dialog der Internet Explorer, obwohl ich den Firefox als Standardbrowser konfiguriert habe. Und die Suche in der Hilfe geht nicht ohne&#8230;JavaScript.</p>
<p>Aber als Entwickler einer Software zur Abgabe von optional verschlüsselten Steuererklärungen hat man mit Themen wie Vertraulichkeit und Sicherheit natürlich überhaupt nichts zu tun.</p>
<p>Unnötig zu erwähnen, dass bis zur letztjährigen Ausgabe der Update-Mechanismus von Wiso-Sparbuch auch ohne JavaScript funktioniert hat.</p>
<p>Ach und noch etwas, Windows 7 kommt in Europa <a href="http://www.golem.de/0906/67720.html">ohne Browser</a> auf den Markt&#8230;</p>
<p>Viele Grüße,<br />
Andreas</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/JavaScript" rel="tag">JavaScript</a>, <a href="http://technorati.com/tag/sichere+Software" rel="tag"> sichere Software</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2009/06/23/bitte-aktivieren-sie-javascriptwofur-eigentlich/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prüfen auf Schreibrechte für eine Datei in C#</title>
		<link>http://www.awenius.de/blog/2009/02/28/prufen-auf-schreibrechte-fur-eine-datei-in-c/</link>
		<comments>http://www.awenius.de/blog/2009/02/28/prufen-auf-schreibrechte-fur-eine-datei-in-c/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 10:15:35 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://www.awenius.de/blog/?p=61</guid>
		<description><![CDATA[Hallo,
manchmal möchte man wissen, ob ein bestimmter Benutzer bestimmte Rechte (z.B. Schreibrechte) für eine bestimmte Datei besitzt. Wie sich herausstellt, ist diese Anforderung alles andere als leicht umzusetzen, weil dabei viele verschiedene Aspekte eine Rolle spielen. Die Vorgehensweise sieht prinzipiell so aus:

Abfragen der Access Control Listen für die Datei
Itererieren über alle Einträge und prüfen ob [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo,</p>
<p>manchmal möchte man wissen, ob ein bestimmter Benutzer bestimmte Rechte (z.B. Schreibrechte) für eine bestimmte Datei besitzt. Wie sich <a href="http://discuss.joelonsoftware.com/default.asp?dotnet.12.589499.7">herausstellt</a>, ist diese Anforderung alles andere als leicht umzusetzen, weil dabei viele verschiedene Aspekte eine Rolle spielen. Die Vorgehensweise sieht prinzipiell so aus:</p>
<ul>
<li>Abfragen der Access Control Listen für die Datei</li>
<li>Itererieren über alle Einträge und prüfen ob man für die Kennung oder die Gruppe des gewünschten Benutzers Einträge findet</li>
<li>Dabei die Präzedenz der Einträge beachten (explizite kommen vor vererbten Regeln, &#8220;Deny&#8221;-Regeln kommen for &#8220;Allow&#8221;-Regeln)</li>
</ul>
<p>Den nicht unerheblichen Code hat dankenswerterweise <a href="http://purinvesting.com/principal_hatt.htm">Bruce Hatt</a> in einem <a href="http://www.codeproject.com/KB/files/UserFileAccessRights.aspx">Artikel auf CodeProject.com</a> veröffentlicht.</p>
<p>Man sollte bedenken, dass die Möglichkeit in eine Datei zu schreiben zusätzlich durch das &#8220;ReadOnly-flag&#8221; und die .NET Code Access Security eingeschränkt sein könnte. Beides wird in dieser Klasse nicht berücksichtigt.</p>
<p>Die Prüfung auf das ReadOnly-flag könnte man so schreiben:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp">FileAttributes attrs <span style="color: #008000;">=</span> File.<span style="color: #0000FF;">GetAttributes</span><span style="color: #000000;">&#40;</span>fileName<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>attrs <span style="color: #008000;">&amp;</span>amp<span style="color: #008000;">;</span> FileAttributes.<span style="color: #0600FF;">ReadOnly</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">!=</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">readOnly</span> <span style="color: #008000;">=</span> true<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Und für die Prüfung im Rahmen der CAS könnte man folgenden Code verwenden:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp">FileIOPermission fp <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> FileIOPermission<span style="color: #000000;">&#40;</span>FileIOPermissionAccess.<span style="color: #0000FF;">Write</span>, fileName<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">try</span>
<span style="color: #000000;">&#123;</span>
    fp.<span style="color: #0000FF;">Demand</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#40;</span>SecurityException<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">readOnly</span> <span style="color: #008000;">=</span> true<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Wenn es nur um die Prüfung auf Schreibrechte geht, hört man oft den Vorschlag, einfach den Schreibvorgang auszuführen und ggf. die geworfene Exception zu fangen. Dieser Vorschlag ist aber nicht immer geeignet. In meinem Fall war es so, dass ich an einer Anwendung arbeite, in der Dateien editiert werden können. Falls Dateien nicht geschrieben werden können, soll dies visualisiert werden. Man möchte aber vermeiden, dazu bei jedem Start der Anwendung die zu editierenden Texte zu speichern, da damit der Timestamp verändert wäre, obwohl der Benutzer die Datei gar nicht geändert hat und auch nicht speichern wollte.</p>
<p>Viele Grüße,<br />
Andreas</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/.NET+Security" rel="tag">.NET Security</a>, <a href="http://technorati.com/tag/File+Permissions" rel="tag"> File Permissions</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awenius.de/blog/2009/02/28/prufen-auf-schreibrechte-fur-eine-datei-in-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
