<?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>Martin&#039;s Blog</title>
	<atom:link href="http://blog.m-ri.de/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.m-ri.de</link>
	<description>Gesammeltes aus dem Leben eines &#34;normalen&#34; Programmierers... :-)</description>
	<lastBuildDate>Sat, 04 Feb 2012 12:07:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Manchmal der letzte Retter in der Not: VA-X und die interne Historie</title>
		<link>http://blog.m-ri.de/index.php/2012/01/27/manchmal-der-letzte-retter-in-der-not-va-x-und-die-interne-historie/</link>
		<comments>http://blog.m-ri.de/index.php/2012/01/27/manchmal-der-letzte-retter-in-der-not-va-x-und-die-interne-historie/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 19:17:56 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[VA-X]]></category>
		<category><![CDATA[VS-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=934</guid>
		<description><![CDATA[So geht es manchmal: Da arbeitet man 4, 8, 12 oder 16 Stunden an einem Modul. Alles sieht gut aus, nicht mehr lange und wir können einchecken. Du änderst noch dies und das, steckst noch mal 2 Stunden Arbeit rein weil noch was optimiert werden soll und auf einmal merkst Du dass Du Dich verrannt hast. [...]]]></description>
			<content:encoded><![CDATA[<p>So geht es manchmal:</p>
<ul>
<li>Da arbeitet man 4, 8, 12 oder 16 Stunden an einem Modul.</li>
<li>Alles sieht gut aus, nicht mehr lange und wir können einchecken.</li>
<li>Du änderst noch dies und das, steckst noch mal 2 Stunden Arbeit rein weil noch was optimiert werden soll und auf einmal merkst Du dass Du Dich verrannt hast. Die letzten 2 Stunden Arbeit hattest Du irgendwie das Gehirn nicht eingeschaltet, x-Änderungen gemacht, die nun alle Sch&#8230;sind.</li>
<li>Undo ist nicht mehr, weil Du schon andere Projekte offen hattest bzw. einmal VS abgeraucht ist.</li>
<li>Du hast Bockmist gebaut und jetzt willst Du auf den Stand von vor 4 Stunden zurück, oder den von gestern Abend.</li>
<li>Ein Shelveset hast Du im TFS nicht angelegt. Das machst Du nur wenn Du ins Wochenende gehst, oder Deinen Kollegen was weiterreichen musst.</li>
</ul>
<p>Was nun? <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_surprised.gif' alt=':eek:' class='wp-smiley' /> </p>
<p>Als <em><strong>VA-X </strong></em>Benutzer (VisualAssist X <a href="http://www.wholetomato.com">http://www.wholetomato.com</a>) hat man tatsächlich noch ein Backup!<br />
Und zwar nicht nur eines, sondern ein paar.<br />
In meinem History Ordner von VA-X<br />
<em>C:\Users\USER\AppData\Local\Microsoft\VisualStudio\10.0\Extensions\Whole Tomato Software\Visual Assist X\VERSION\Data\vs10\history\</em><br />
werde ich fündig&#8230;</p>
<p><a href="http://blog.m-ri.de/wp-content/uploads/2012/01/vax-history.png"><img class="wp-image-937 alignnone" title="vax-history" src="http://blog.m-ri.de/wp-content/uploads/2012/01/vax-history.png" alt="" width="584" height="187" /></a></p>
<p>Ufff&#8230; <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' /> </p>
<p>Ich habe dieses Backup mittlerweile schon so oft verwendet, dass ich dazu übergangen bin diesen Ordner umzulegen an eine Stelle an die ich schneller dran komme. Das geht über den Registry Schlüssel <em>HKCU\Software\Whole Tomato\UserDataDir</em>.</p>
<p>Wer mehr dazu wissen will findet hier weitere Infos:<br />
<a href="http://www.wholetomato.com/forum/topic.asp?TOPIC_ID=6865">http://www.wholetomato.com/forum/topic.asp?TOPIC_ID=6865</a></p>
<p><strong>Nachtrag (30.01.2012):</strong><br />
Damit diese Funktion auch verfügbar ist muss im <em>VA-X</em> die <em>Auto Recovery</em> Option eingeschaltet sein.<br />
<em>VA-X -&gt; Options -&gt; Performance -&gt; Enable Auto Recovery</em></p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2012/01/27/manchmal-der-letzte-retter-in-der-not-va-x-und-die-interne-historie/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2010 komplett entfernen bzw. die Unmöglichkeit es richtig zu tun</title>
		<link>http://blog.m-ri.de/index.php/2012/01/18/visual-studio-2010-komplett-entfernen-bzw-die-unmoglichkeit-es-richtig-zu-tun/</link>
		<comments>http://blog.m-ri.de/index.php/2012/01/18/visual-studio-2010-komplett-entfernen-bzw-die-unmoglichkeit-es-richtig-zu-tun/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 19:25:35 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Installation]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[Uninstall]]></category>
		<category><![CDATA[VS-2010]]></category>
		<category><![CDATA[VS-Tipps&Tricks]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=928</guid>
		<description><![CDATA[Immer wieder mal lese ich von Problemen bei der Installation oder mit Installationen von VS-2010. Ich hatte den Fall noch nie, aber es gibt scheinbar immer wieder Installationen in denen der Wurm drin ist. VS-2010 installiert eine Unmenge an Komponenten und Programmteilen. Die meisten können einfach deinstalliert/gelöscht werden. Aber es bleiben immer noch ein Haufen DLLs/ActiveX Controls und [...]]]></description>
			<content:encoded><![CDATA[<p>Immer wieder mal lese ich von Problemen bei der Installation oder mit Installationen von <em>VS-2010</em>. Ich hatte den Fall noch nie, aber es gibt scheinbar immer wieder Installationen in denen der Wurm drin ist.</p>
<p><em>VS-2010</em> installiert eine Unmenge an Komponenten und Programmteilen. Die meisten können einfach deinstalliert/gelöscht werden. Aber es bleiben immer noch ein Haufen DLLs/ActiveX Controls und Registry Einträge und Verweise auf Verzeichnisse. Und leider gibt es für die Visual Studio 2010 keinen <em>richtigen</em> Uninstaller, der auch alle Artefakte löscht und deshalb kann ich gleich zu Anfang sagen, dass man außer der Deinstallation wirklich wenig tun kann.<br />
Eine Reparaturinstallation sollte man aber bei einer bestehenden Installation in jedem Fall einmal, bevor man zu härteren Maßnahmen greift. Die wirkt oft schon Wunder.</p>
<p>Im Netz gibt es das folgende Utility: <em><strong>Visual Studio 2010 Uninstall Utility</strong></em>:<br />
<a href="http://archive.msdn.microsoft.com/vs2010uninstall">http://archive.msdn.microsoft.com/vs2010uninstall</a><br />
Das Tool hat drei Operationsweisen die man in dem obigen Link erklärt findet.<br />
Das Tool funktioniert eigentlich ohne Probleme aber benutzt auch nur auf dem MSI Uninstall Prozess auf, und dabei berücksichtigt es nicht einmal Servicepacks. Sollte man also das <em>SP1</em> von <em>Visual Studio 2010</em> installiert haben, dann muss man dieses vorher selber entfernen.</p>
<p>Das dieses Tool macht aber auch nur die Arbeit halb. Das erkennt man mit einem schnellen Blick in Registry. Der Ast <em>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0</em> wird durch die Deinstallation nicht entfernt und man muß in diesem Fall manuell Hand anlegen.</p>
<p>Wenn man also persistente Probleme mit der <em>VS-2010</em> Installation hat, die man nicht über die Setup-Logs oder mit Tipps aus den Foren lösen kann, dann bleibt nach meiner Meinung nur der harte Weg den Rechner neu aufzusetzen. Bisher bin ich davon verschont geblieben und meine Installation haben immer von Rechnerwechsel zu Rechnerwechsel gehalten.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2012/01/18/visual-studio-2010-komplett-entfernen-bzw-die-unmoglichkeit-es-richtig-zu-tun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>4 Termine für Microsoft C++ Infoday 2012</title>
		<link>http://blog.m-ri.de/index.php/2012/01/12/4-termine-fur-microsoft-c-infoday-2012/</link>
		<comments>http://blog.m-ri.de/index.php/2012/01/12/4-termine-fur-microsoft-c-infoday-2012/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 16:56:27 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[C++11]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[VS-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=932</guid>
		<description><![CDATA[Wer letztes Jahr im Oktober keine Zeit hatte zum C++ Info Day nach München zu kommen, kann dies nun nachholen. In etwa ähnliche Themen werden an vier verschiedenen Terminen und Standorten von Microsoft kostenlos angeboten: Die Themen: C++ 11: Modernes C++ im 21. Jahrhundert Parallel-Power in Visual Studio 11: Konzepte und Tools Application Lifecycle Management für [...]]]></description>
			<content:encoded><![CDATA[<p>Wer letztes Jahr im Oktober keine Zeit hatte zum <em>C++ Info Day</em> nach München zu kommen, kann dies nun nachholen.</p>
<p>In etwa ähnliche Themen werden an vier verschiedenen Terminen und Standorten von Microsoft kostenlos angeboten:</p>
<p><strong>Die Themen:</strong></p>
<ul>
<li><strong><em>C++ 11: Modernes C++ im 21. Jahrhundert</em></strong></li>
<li><strong><em>Parallel-Power in Visual Studio 11: Konzepte und Tools</em></strong></li>
<li><strong><em>Application Lifecycle Management für C++: Die nächste Generation</em></strong></li>
</ul>
<p><strong>Die Termine:</strong></p>
<ul>
<li><strong><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032502632&amp;Culture=de-DE">02.02.2012 14:00-18:00 Berlin</a></strong></li>
<li><strong><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032502635&amp;Culture=de-DE">07.02.2012 14:00-18:00 Bad Homburg</a></strong></li>
<li><strong><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032502637&amp;Culture=de-DE">13.02.2012 14:00-18:00 Karlsruhe</a></strong></li>
<li><strong><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032502646&amp;Culture=de-DE">05.03.2012 14:00-18:00 Köln</a></strong></li>
</ul>
<p>Ich werde 07.02. in Bad Homburg vor Ort sein um ein wenig Networking zu betreiben.<br />
Da es aktuell eigentlich keine C/C++ Community im Netz gibt sehe ich hier die einzige wirklich gute Möglichkeit mit anderen C/C++ Entwicklern ins Gespräch zu kommen.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2012/01/12/4-termine-fur-microsoft-c-infoday-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mit dem Nvidia GeForce 285.62 Treiber hat man kein Bild in der Windows Media Center Edition</title>
		<link>http://blog.m-ri.de/index.php/2012/01/09/mit-dem-nvidia-geforce-285-62-treiber-hat-man-kein-bild-in-der-windows-media-center-edition/</link>
		<comments>http://blog.m-ri.de/index.php/2012/01/09/mit-dem-nvidia-geforce-285-62-treiber-hat-man-kein-bild-in-der-windows-media-center-edition/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 19:42:11 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[GeForce]]></category>
		<category><![CDATA[MCE]]></category>
		<category><![CDATA[Nvidia]]></category>
		<category><![CDATA[TerraTec]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=929</guid>
		<description><![CDATA[Ich habe meinen neuen Rechner mit einer TerraTec Cinergy T PCIe Dual Karte ausgestattet und dachte schon mit deren Treiber oder der Karte stimmt was nicht, weil ich in der Media Center Edition kein Bild bekommen habe. Der Ton funktionierte tadellos. Die Ursache lag aber in dem neuen Nvidia GeForce Treiber 285.62 (Windows 7, 64bit). [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe meinen neuen Rechner mit einer <em>TerraTec Cinergy T PCIe Dual</em> Karte ausgestattet und dachte schon mit deren Treiber oder der Karte stimmt was nicht, weil ich in der <em>Media Center Edition</em> kein Bild bekommen habe. Der Ton funktionierte tadellos.</p>
<p>Die Ursache lag aber in dem neuen <em>Nvidia GeForce Treiber 285.62 </em>(<em>Windows 7, 64bit</em>). Mit diesem dem hat auch bei der Wiedergabe einer Aufzeichnung kein Bild.  Nun bin ich auf den Treiber Stand 280.26 zurück gegangen und alles ist wieder gut.</p>
<p>Da ich nicht Zocke spielen, die neuen Features dieser Treiberversion für mich sowieso keine große Rolle.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2012/01/09/mit-dem-nvidia-geforce-285-62-treiber-hat-man-kein-bild-in-der-windows-media-center-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ich glaube irgendein Staat verkauft jetzt Kopfhörer um die Staatschulden zu begleichen ;)</title>
		<link>http://blog.m-ri.de/index.php/2011/12/07/ich-glaube-irgendein-staat-verkauft-jetzt-kopfhorer-um-die-staatschulden-zu-begleichen/</link>
		<comments>http://blog.m-ri.de/index.php/2011/12/07/ich-glaube-irgendein-staat-verkauft-jetzt-kopfhorer-um-die-staatschulden-zu-begleichen/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 14:25:17 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Real Life]]></category>
		<category><![CDATA[Sonstiges]]></category>
		<category><![CDATA[Witzt]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=925</guid>
		<description><![CDATA[Wenn Obama drei Stück davon verkaufen könnte, hat er keine Schulden mehr mit den USA! &#8230; ohne Worte:  Und das Beste sind die 4,95 Versandkosten Gefunden auf: http://www.amazon.de/Creative-630-Ear-Ohrhörer-Kabellänge-schwarz/dp/B0009G6FQI/ref=sr_1_18?ie=UTF8&#38;m=AOFI6YD3RXI9O&#38;s=generic&#38;qid=1323255586&#38;sr=1-18&#38;tag=hornoxecom-21 &#160; Copyright &#169; 2010 Martin RichterDieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn Obama drei Stück davon verkaufen könnte, hat er keine Schulden mehr mit den USA!</p>
<p>&#8230; ohne Worte:</p>
<p><a href="http://blog.m-ri.de/wp-content/uploads/2011/12/Amazon.png"><img class="size-full wp-image-926 alignnone" title="Amazon" src="http://blog.m-ri.de/wp-content/uploads/2011/12/Amazon.png" alt="" width="569" height="293" /></a></p>
<p><strong> Und das Beste sind die 4,95 Versandkosten <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /> </strong></p>
<p>Gefunden auf:<br />
<a href="http://www.amazon.de/Creative-630-Ear-Ohrhörer-Kabellänge-schwarz/dp/B0009G6FQI/ref=sr_1_18?ie=UTF8&amp;m=AOFI6YD3RXI9O&amp;s=generic&amp;qid=1323255586&amp;sr=1-18&amp;tag=hornoxecom-21">http://www.amazon.de/Creative-630-Ear-Ohrhörer-Kabellänge-schwarz/dp/B0009G6FQI/ref=sr_1_18?ie=UTF8&amp;m=AOFI6YD3RXI9O&amp;s=generic&amp;qid=1323255586&amp;sr=1-18&amp;tag=hornoxecom-21</a></p>
<p>&nbsp;</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/12/07/ich-glaube-irgendein-staat-verkauft-jetzt-kopfhorer-um-die-staatschulden-zu-begleichen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Die Tücke mit temporären Objekten und Konvertierungs-Operatoren</title>
		<link>http://blog.m-ri.de/index.php/2011/12/05/die-tucke-mit-temporaren-objekten-und-konvertierungs-operatoren/</link>
		<comments>http://blog.m-ri.de/index.php/2011/12/05/die-tucke-mit-temporaren-objekten-und-konvertierungs-operatoren/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 21:52:42 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=596</guid>
		<description><![CDATA[Wieder mal ein Beispiel für einen versteckten Bug. Nachfolgender Code sieht ganz unscheinbar aus, aber er birgt eine Falle mit sich, die in der Implementierung der Klasse verborgen ist: void CImageButton::OnSysColorChange&#40;&#41; &#123; // Farbe hat geändert CButton::OnSysColorChange&#40;&#41;; // Bitmap neu laden LoadBitmap&#40;m_strResource.IsEmpty&#40;&#41; ? m_lpszResource : m_strResource&#41;; &#125; LoadBitmap ist eine Funktion, die die Bitmap neu [...]]]></description>
			<content:encoded><![CDATA[<p>Wieder mal ein Beispiel für einen versteckten Bug.<br />
Nachfolgender Code sieht ganz unscheinbar aus, aber er birgt eine Falle mit sich, die in der Implementierung der Klasse verborgen ist:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">void</span> CImageButton<span style="color: #008080;">::</span><span style="color: #007788;">OnSysColorChange</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
   <span style="color: #666666;">// Farbe hat geändert</span>
   CButton<span style="color: #008080;">::</span><span style="color: #007788;">OnSysColorChange</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #666666;">// Bitmap neu laden</span>
   LoadBitmap<span style="color: #008000;">&#40;</span>m_strResource.<span style="color: #007788;">IsEmpty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008080;">?</span> m_lpszResource <span style="color: #008080;">:</span> m_strResource<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p><em>LoadBitmap</em> ist eine Funktion, die die Bitmap neu lädt und entsprechend der eingestellten Systemfarben einige Farben aktualisiet. Also das bekannte Verhalten von Toolbars. <em>LoadBitmap</em> nimmt einen LPCTSTR und damit kann die <em>CImageButton</em> Klasse entweder mit einem Ressource String arbeiten (der evtl. mit MAKEINTRESOURCE eine ID ist und kein echter Zeiger), oder eben einem Namen zu einer Bitmap Ressource.</p>
<p>Damit bei einem Wechsel der Systemfarben, die Bitmap neu laden werden kann, merkt es sich die Resource.  In der Funktion findet hier eine Konvertierung des alten <em>CString</em> Wertes in einen <em>LPCTSTR</em> statt, mit dem eingebauten Konvertierungs-Operator.</p>
<p>Das Problem in der Implentierung dieser Klasse war aber, dass <em>LoadBitmap</em> sich den neuen Ressourcennamen merken soll aber zuvor eine interne <em>Clear</em> Funktion aufruft, die die bestehende Bitmap und andere Klassendaten freigibt, bevor <em>m_strResource</em> oder <em>m_lpszResource</em>, neu gesetzt werden:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">void</span> CImageButton<span style="color: #008080;">::</span><span style="color: #007788;">Clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  ...
  <span style="color: #666666;">// Clear old infos</span>
  m_lpszResource <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
  m_strResource.<span style="color: #007788;">Empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  ...
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> CImageButton<span style="color: #008080;">::</span><span style="color: #007788;">LoadBitmap</span><span style="color: #008000;">&#40;</span>LPCTSTR pszResource<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
   Clear<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
...
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ISINTRESOURCE<span style="color: #008000;">&#40;</span>pszResource<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
...
   <span style="color: #0000ff;">else</span>
   <span style="color: #008000;">&#123;</span>
       m_strResource <span style="color: #000080;">=</span> pszResource<span style="color: #008080;">;</span>
...
   <span style="color: #008000;">&#125;</span>
...
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Das führt aber nun zu folgendem Problem: <em>Clear</em> löscht <em>m_strResource</em> und damit wird der übergebene Zeiger an <em>LoadBitmap</em> ungültig, mit der Folge, dass die ürsprüngliche Bitmap nicht mehr gefunden wird, wenn in der Zwischenzeit der Heap auf dem dieser String lag neu verwendet wurde. In der Release Version trat dieser Fehler selten auf. In der Debug Version war der Fehler sofort nachvollziehbar, denn hier wird der Heap bei der Freigabe auf einen einhaltlichen Wert zurückgesetzt.</p>
<p>Die Lösung ist einfach: Es ist nötig den alten Inhalt zu kopieren um einen gültigen Zeiger zu behalten.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">void</span> CImageButton<span style="color: #008080;">::</span><span style="color: #007788;">OnSysColorChange</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #666666;">// System colors changed</span>
  CButton<span style="color: #008080;">::</span><span style="color: #007788;">OnSysColorChange</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #666666;">// We need to protect the resource name, because LoadItem calls</span>
  <span style="color: #666666;">// Clear and this might empty m_sResource. And this causes</span>
  <span style="color: #666666;">// the string object on the stack to get deleted and the pointer</span>
  <span style="color: #666666;">// points into nowhere land. So we use a copy of the string here.</span>
  CString strRessource<span style="color: #008000;">&#40;</span>m_strResource<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  LoadBitmap<span style="color: #008000;">&#40;</span>strRessource.<span style="color: #007788;">IsEmpty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008080;">?</span> m_lpszResource <span style="color: #008080;">:</span> strRessource<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/12/05/die-tucke-mit-temporaren-objekten-und-konvertierungs-operatoren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Preiswertes Netzteil für den eBook Reader Sony PRS-T1</title>
		<link>http://blog.m-ri.de/index.php/2011/11/30/preiswertes-netzteil-fur-den-ebook-reader-sony-prs-t1/</link>
		<comments>http://blog.m-ri.de/index.php/2011/11/30/preiswertes-netzteil-fur-den-ebook-reader-sony-prs-t1/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 18:17:50 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[eBook]]></category>
		<category><![CDATA[PRS-T1]]></category>
		<category><![CDATA[Sony]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=922</guid>
		<description><![CDATA[Mit den Netzteilen für die Sony eBook Reader PRS-T1 ist das so eine Sache, es funktionieren nicht alle. Und mal ganz ehrlich: 25,&#8211; Euro für das originale Ladegerät von Sony ist mir einfach zu teuer. 4 alternative Netzteile habe ich ausprobiert (Hama, Belkin und 2 Noname Produkte), die alle bei iPads und iPods und angeblich auch [...]]]></description>
			<content:encoded><![CDATA[<p>Mit den Netzteilen für die <em>Sony eBook Reader PRS-T1</em> ist das so eine Sache, es funktionieren nicht alle. Und mal ganz ehrlich: 25,&#8211; Euro für das originale Ladegerät von Sony ist mir einfach zu teuer.<br />
4 alternative Netzteile habe ich ausprobiert (<em>Hama</em>, <em>Belkin</em> und 2 Noname Produkte), die alle bei <em>iPads</em> und <em>iPods</em> und <em>angeblich</em> auch für <em>Sony PRS</em> Geräte funktionieren. Bei meinem eBook-Reader allerdings nicht. Die Beratung im Mediamarkt war leider auch unprofessionell und lautete nur: Das geht schon&#8230; es ging aber nichts. Laut Artikeln im Netz benötigt der Sony Reader auch auf dem Datenkabel 5V Spannung (aber um das zu prüfen bin ich zu wenig Techniker).</p>
<p>Meine Tochter hat ein <em>Samsung</em> Smartphone und als ich ihr Ladegerät mal verwendet habe hatte ich endlich Erfolg. Und mit ein wenig Recherche im Internet wurde dies auch im Sony eBook-Reader Forum von einem anderen Nutzer bestätigt.</p>
<p>Für 4,50 Euro (inkl. Porto <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' />  ) habe ich mir jetzt ein original <em>Samsung</em>  Ladegerät Typ <em>ETA0U10EBE</em> (für <em>Galaxy S Plus</em> und <em>Galaxy S super</em> und andere) besorgt und das funktioniert super. Meine ersten Versuche haben auch gezeigt, dass dieses Gerät den Sony PRS-T1 Reader auch komplett auflädt. (Was angeblich bei einigen alternativen Ladegeräten nicht der Fall ist, aber selbst, wenn nur 90% der Ladung erreicht würde ist das OK und würde den internen Akku auch schonen). Das  <em>ETA0U10EBE</em> ist wunderbar klein, leicht und kompakt, preiswert und überall zu haben.</p>
<p>Happy eBook Reading <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/11/30/preiswertes-netzteil-fur-den-ebook-reader-sony-prs-t1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>VS-Tipps &amp; Tricks: Debugger Pseudo Variablen</title>
		<link>http://blog.m-ri.de/index.php/2011/11/26/vs-tipps-tricks-debugger-pseudo-variablen/</link>
		<comments>http://blog.m-ri.de/index.php/2011/11/26/vs-tipps-tricks-debugger-pseudo-variablen/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 18:28:55 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[VS-Tipps&Tricks]]></category>
		<category><![CDATA[Debuggen]]></category>
		<category><![CDATA[VC-2008]]></category>
		<category><![CDATA[VC-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=851</guid>
		<description><![CDATA[Die folgenden Variablen helfen mir immer wieder beim Debuggen und zeigen einem während des Debuggens in Watch-Window manch nützliche Information: $TID Die Thread ID des aktuellen Threads. Nützlich wenn man mehrere Threads debuggt und bestimmte Threads bei einem Breakpoint identifizieren muss. $HANDLES Die Anzahl der aktuell benutzen System-Handles des Prozesses. Handle Leaks lassen sich damit [...]]]></description>
			<content:encoded><![CDATA[<p>Die folgenden Variablen helfen mir immer wieder beim Debuggen und zeigen einem während des Debuggens in Watch-Window manch nützliche Information:</p>
<ul>
<li><strong><em>$TID<br />
</em></strong>Die Thread ID des aktuellen Threads. Nützlich wenn man mehrere Threads debuggt und bestimmte Threads bei einem Breakpoint identifizieren muss.</li>
<li><em><strong>$HANDLES</strong></em><br />
Die Anzahl der aktuell benutzen System-Handles des Prozesses. Handle Leaks lassen sich damit im Debugger leicht überwachen.</li>
<li><em><strong>$ERR<br />
</strong>GetLastError</em> leicht gemacht. Schlägt ein WinApi Befehl fehl, dann ist es schön das man sofort beim Debuggen im Watch-Window sehen kann was die Ursache war. Oft genug ist ja im Code selbst kein Aufruf von <em>GetLastError</em> vorhanden oder nötig.</li>
</ul>
<p>Siehe auch MSDN:<br />
<a href="http://msdn.microsoft.com/en-us/library/ms164891.aspx">http://msdn.microsoft.com/en-us/library/ms164891.aspx</a></p>
<p>BTW: <em>WinDbg</em> hat noch einige mehr nette Pseudovariablen:<br />
<a href="http://blogs.msdn.com/b/debuggingtoolbox/archive/2008/06/16/special-command-using-variables-and-retrieving-information-through-pseudo-registers.aspx">http://blogs.msdn.com/b/debuggingtoolbox/archive/2008/06/16/special-command-using-variables-and-retrieving-information-through-pseudo-registers.aspx</a><br />
Schmerzhaft vermisse ich immer wieder <em>$PEB, $TEB, $TPID, $RA</em> im <em>Visual Studio, </em>komisch, dass es die nur im <em>WinDbg</em> gibt.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/11/26/vs-tipps-tricks-debugger-pseudo-variablen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wie man bei einem Sony PRS-T1 die Autorisierung aufheben kann</title>
		<link>http://blog.m-ri.de/index.php/2011/10/28/wie-man-bei-einem-sony-prs-t1-die-autorisierung-aufheben-kann/</link>
		<comments>http://blog.m-ri.de/index.php/2011/10/28/wie-man-bei-einem-sony-prs-t1-die-autorisierung-aufheben-kann/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 05:21:16 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[eBook]]></category>
		<category><![CDATA[PRS-T1]]></category>
		<category><![CDATA[Sony]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=914</guid>
		<description><![CDATA[In manchen Foren wird gerätselt wie man die Autorisierung des Sony PRS-T1 Ebook-Readers aufheben kann. Die Adobe-Digital-Editions (Ver. 1.7.2) können nicht benutzt werden. Diese zeigen den PRS-T1 gar nicht an wie z.B. einen OYO. Man muss die entsprechende Sony-Reader Software Reader for PC installieren um die Autorisierung durchzuführen. Die Installationssoftware befindet sich ja auf dem Reader. [...]]]></description>
			<content:encoded><![CDATA[<p>In manchen Foren wird gerätselt wie man die Autorisierung des <em>Sony PRS-T1</em> Ebook-Readers aufheben kann.<br />
Die Adobe-Digital-Editions (Ver. 1.7.2) können nicht benutzt werden. Diese zeigen den <em>PRS-T1 </em>gar nicht an wie z.B. einen OYO.</p>
<p>Man muss die entsprechende Sony-Reader Software <em>Reader for PC</em> installieren um die Autorisierung durchzuführen. Die Installationssoftware befindet sich ja auf dem Reader.<br />
Die Autorisierung habe ich über den Menüpunkt <strong>Bearbeiten -&gt; Einstellungen</strong> bewerkstelligt.</p>
<p>In der Onlinehilfe von <em>Reader for PC</em> steht nun folgendes für das Aufheben der Autorisierung:</p>
<blockquote>
<ol>
<li>Schalten Sie das Reader-Gerät ein und schließen Sie es dann mit dem mitgelieferten USB-Kabel an Ihren Computer an.<br />
Reader für PC wird startet, und das Reader-Symbol wird in der Quellenleiste angezeigt.<br />
Wenn &#8220;Automatischer Start&#8221; deaktiviert ist, starten Sie Reader für PC manuell.</li>
<li>Drücken Sie Umschalttaste+Strg auf der Tastatur.</li>
<li>Klicken Sie links auf &#8220;Autorisierung aufheben&#8221;.</li>
<li>Klicken Sie auf  neben &#8220;Autorisierung des angeschlossenen Geräts aufheben&#8221;.<br />
Alle von Ihnen erworbenen Inhalte werden vom Gerät gelöscht</li>
</ol>
</blockquote>
<p>Das ist aber falsch. Man kann in der <em>Reader for PC</em> Software sooft <strong>Umschaltaste+Strg</strong> drücken wie man will. Es erscheint gar nichts.</p>
<p>Es fehlt ein kleiner Satz, dass man dies über den Menüpunkt <strong>Bearbeiten -&gt; Einstellungen </strong>machen muss<strong>.</strong><br />
Hier also der Weg zur Deautorisierung:</p>
<ol>
<li>Software <em>Reader for PC</em> starten</li>
<li><em>Sony PRS-T1 Reader</em> anschließen</li>
<li><strong>Umschalttaste+Strg</strong> drücken und gleichzeitig das Menü <strong>Bearbeiten -&gt; Einstellungen </strong>öffnen</li>
<li>Es erscheint ein Dialog in dem die Autorisierung aufgehoben werden kann:<br />
<a href="http://blog.m-ri.de/wp-content/uploads/2011/10/PRS-T1.png"><img class="size-full wp-image-916 alignnone" title="PRS-T1" src="http://blog.m-ri.de/wp-content/uploads/2011/10/PRS-T1.png" alt="" width="237" height="157" /></a></li>
</ol>
<p>Ich hoffe damit kommt man klar <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Nachtrag (01.01.2010): </strong>Die Autorisierung eines PCs lässt sich mit der Hilfe der <em>Adobe Digital Editions</em> aufheben. Man startet dazu die Software und drückt die Tastenkombination <strong><em>Strg+Umschalt+D</em></strong>. Damit wird die Autorisierung für diesen PC aufgehoben. Verschlüsselte eBooks lassen sich dann nicht mehr lesen.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/10/28/wie-man-bei-einem-sony-prs-t1-die-autorisierung-aufheben-kann/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Für was ist der Makro %(PreprocessorDefinitions) gut ?</title>
		<link>http://blog.m-ri.de/index.php/2011/10/16/fur-was-ist-der-makro-preprocessordefinitions-gut/</link>
		<comments>http://blog.m-ri.de/index.php/2011/10/16/fur-was-ist-der-makro-preprocessordefinitions-gut/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 17:54:35 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[ATL]]></category>
		<category><![CDATA[CRT]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[VS-2008]]></category>
		<category><![CDATA[VS-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=903</guid>
		<description><![CDATA[In den C++ Compilereinstellungen finden sich ein vorgegebener Makro %(PreprocessorDefinitions) in den C++ Präprozessor Definitionen. Die Verwendung dieses Makros ist nicht ganz offensichtlich. Dieser Makro sollten in jedem Fall nicht entfernt werden, denn Sie dienen der Übernahme einiger Einstellungen aus der General-Seite für die C++ Projekte. Zum Beispiel werden die Einstellungen für Unicode und MBCS über [...]]]></description>
			<content:encoded><![CDATA[<p>In den C++ Compilereinstellungen finden sich ein vorgegebener Makro <em>%(PreprocessorDefinitions)</em> in den C++ Präprozessor Definitionen. Die Verwendung dieses Makros ist nicht ganz offensichtlich.</p>
<p>Dieser Makro sollten in jedem Fall nicht entfernt werden, denn Sie dienen der Übernahme einiger Einstellungen aus der <em>General</em>-Seite für die C++ Projekte. Zum Beispiel werden die Einstellungen für Unicode und MBCS über den Makro <em>%(PreprocessorDefinitions)</em> in die allgemeinen Compiler-Einstellungen übernommen (die entsprechenden Defines sind <em>_UNICODE; UNICODE; _MBCS </em>).<br />
Erzeugt man eine DLL wird zusätzlich <em>_WINDLL</em> gesetzt.<br />
Setzt man ATL Optionen in der General Seite wird auch über die <em>%(PreprocessorDefinitions) _ATLDLL</em> bzw. <em>_ATL_STATIC_REGISTRY</em> gesetzt oder zurückgesetzt.<br />
Gleiches gilt, wenn die <em>MFC</em> als shared DLL verwendet wird. In diesem Fall wird der Define <em>_AFXDLL</em> zusätzlich gesetzt.</p>
<p>Löscht man also <em>%(PreprocessorDefinitions)</em> dann werden alle diese Einstellungen nicht mehr  korrekt übernommen.</p>
<p>Anmerkung:<br />
Bei dem Linker Makro <em>%(AdditionalDependencies) </em>habe ich eine ähnliche Verwendung vermutet, konnte aber keine direkte Beziehung zur Seite General herstellen.</p>
<p>Obwohl es auch hier Einflüsse auf die Linkereinstellungen gibt bei Änderungen in den <em>General</em>-Einstellungen. Werden allerdings die MFC als zusätzliche Bibliothek ausgewählt werden die Standard-LIBs aus dem SDK komplett entfernt. Hier gibt die MFC Bibliothek selbst vor in welchen zusätzlichen Libs, des SDK gesucht werden soll über #pragma comment(lib,..).</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/10/16/fur-was-ist-der-makro-preprocessordefinitions-gut/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

