<?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 &#187; MFCNext</title>
	<atom:link href="http://blog.m-ri.de/index.php/tag/mfcnext/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>BUG: Schwarzer Patchday für alle OS XP und später 3. &#8211; MFC 8.0 (VC-2005) oder MFC 9.0 (VC-2008) die dynamisch gelinkt wurden finden die MFC Sprach-DLLs evtl. nicht mehr nach Installation der Sicherheitspatches vom 12.04.2011</title>
		<link>http://blog.m-ri.de/index.php/2011/04/14/bug-schwarzer-patchday-fur-alle-os-xp-und-spater-3-mfc-8-0-vc-2005-oder-mfc-9-0-vc-2008-die-dynamisch-gelinkt-wurden-finden-die-mfc-sprach-dlls-evtl-nicht-mehr-nach-installation-der-sicherhei/</link>
		<comments>http://blog.m-ri.de/index.php/2011/04/14/bug-schwarzer-patchday-fur-alle-os-xp-und-spater-3-mfc-8-0-vc-2005-oder-mfc-9-0-vc-2008-die-dynamisch-gelinkt-wurden-finden-die-mfc-sprach-dlls-evtl-nicht-mehr-nach-installation-der-sicherhei/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 08:12:30 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Vista / Windows 7]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[MFCNext]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[SP]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[VS-2005]]></category>
		<category><![CDATA[VS-2008]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[WIndows XP]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=826</guid>
		<description><![CDATA[Betroffen sind: Alle Programme die mit MFC 8.0 oder MFC 9.0 erzeugt wurden und dynamisch an die MFC DLLs gelinkt sind. Alle Betriebssysteme ab Windows XP aufwärts. 32bit wie 64bit Alle Programme, die nicht die MFC und CRT DLLs applikationsnah (d.h. im Programmverzeichnis, siehe dazu auch die Fußnote in meinem Artikel) installiert haben. Also alle [...]]]></description>
			<content:encoded><![CDATA[<h3>Betroffen sind:</h3>
<ul>
<li>Alle Programme die mit MFC 8.0 oder MFC 9.0 erzeugt wurden und dynamisch an die <em>MFC DLLs</em> gelinkt sind.</li>
<li>Alle Betriebssysteme ab <em>Windows XP </em>aufwärts. 32bit wie 64bit</li>
<li>Alle Programme, die nicht die <em>MFC</em> und <em>CRT DLLs </em>applikationsnah (d.h. im Programmverzeichnis, siehe dazu auch die Fußnote in meinem Artikel) installiert haben. Also alle Programme die <em>WinSxS</em> benutzen und die <em>VCRedist_x86.exe </em>( <em>VCRedist_x64.exe</em>)  mit ausliefern.</li>
<li>Alle Programme, die lokalisiert sind und die <em>MFC90xxx.DLL </em>bzw. <em>MFC80xxx.DLL </em>Sprach-DLLs verwenden und das OS nicht auf Englisch eingestellt ist</li>
</ul>
<h3>Betrifft die folgenden Fixes vom 12.04.2011:</h3>
<p>Für VS-2005 SP1 <a onclick="javascript:_gaq.push(['_trackEvent','outbound-article','support.microsoft.com']);" href="http://support.microsoft.com/kb/2465367">http://support.microsoft.com/kb/2465367</a> und <a onclick="javascript:_gaq.push(['_trackEvent','outbound-article','support.microsoft.com']);" href="http://support.microsoft.com/kb/2467175">http://support.microsoft.com/kb/2467175</a><br />
Für VS-2008 SP1 <a onclick="javascript:_gaq.push(['_trackEvent','outbound-article','support.microsoft.com']);" href="http://support.microsoft.com/kb/2465361">http://support.microsoft.com/kb/2465361</a> und <a onclick="javascript:_gaq.push(['_trackEvent','outbound-article','support.microsoft.com']);" href="http://support.microsoft.com/kb/2467174">http://support.microsoft.com/kb/2467174</a></p>
<h3>Effekt:</h3>
<p>Die MFC Statelite DLLs werden nicht geladen. Teile der Anwendung erscheinen in englischer Sprache.</p>
<h3>Hintergrund:</h3>
<p>Um das Laden von falschen Satelite DLLs zu verhindern (<em>Binary Planting</em>), wurde intern in <em>appcore.cpp </em>in der Funktion <em>_AfxLoadLangDLL </em>geprüft, ob die DLLs in aus einem Activation Context geladen werden oder nicht.  Sollte ein Activation Context vorhanden sein, dann kann man gefahrlos die Sprach DLLs (<em>MFCDEUxxx.DLL</em> etc.) ohne Pfadnamen laden. Ist kein Activation Context vorhanden wird der Pfad der Anwendung verwendet und <em>LoadLibrary</em> mit vollem Pfadnamen durchgeführt.</p>
<p>Der Code der dazu verwendet wird sieht so aus (Leerzeilen entfernt):</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">...
<span style="color: #007788;">TCHAR</span> <span style="color: #000040;">*</span>pszFilename <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">PathFindFileName</span><span style="color: #008000;">&#40;</span>szLangDLL<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
ACTCTX_SECTION_KEYED_DATA data<span style="color: #008080;">;</span>
<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>FindActCtxSectionString<span style="color: #008000;">&#40;</span>
    FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX,
    <span style="color: #0000ff;">NULL</span>,
    ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION,
    pszFilename,
    <span style="color: #000040;">&amp;</span>data<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #666666;">// Load using the dll name only...</span>
    hInstance <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">LoadLibraryEx</span><span style="color: #008000;">&#40;</span>pszFilename, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">else</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #666666;">// Load using the full path...</span>
    hInstance <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">LoadLibraryEx</span><span style="color: #008000;">&#40;</span>szLangDLL, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
...</pre></div></div>

<p>Eigentlich sieht der Code prima aus. Und er verträgt sich auch mit der Doku von <a href="http://msdn.microsoft.com/en-us/library/aa375149(VS.85).aspx#">FindActCtxSectionString</a> dort wird der letzte Parameter als <em>__out</em> definiert.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">BOOL FindActCtxSectionString<span style="color: #008000;">&#40;</span>
  __in   DWORD dwFlags,
  __in   <span style="color: #0000ff;">const</span> GUID <span style="color: #000040;">*</span>lpExtensionGuid,
  __in   ULONG ulSectionId,
  __in   LPCTSTR lpStringToFind,
  __out  PACTCTX_SECTION_KEYED_DATA ReturnedData
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>Aber die Doku zu <a href="http://msdn.microsoft.com/en-us/library/aa374148(VS.85).aspx">ACTCTX_SECTION_KEYED_DATA </a>sagt was anderes:</p>
<blockquote><p>Callers <strong>should initialize </strong>the ACTCTX_SECTION_KEYED_DATA structure as such:<br />
&#8220;ACTCTX_SECTION_KEYED_DATA askd = { sizeof(askd) };&#8221;<br />
which initializes all members to zero/null except the size field which is set correctly.</p></blockquote>
<p>(BTW: Auch ein krasser Doku-Bug in meinen Augen)</p>
<p>Und jetzt sieht man was dem Code fehlt: <strong>data.cbSize wird nicht gesetzt</strong> <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /><br />
Daraus ergeben sich nun drei Varianten, da <em>data.cbSize </em>nun zufälligen (nicht initialisierten) Inhalt hat:</p>
<ol>
<li><em>data.cbSize </em>ist größer als  <em>sizeof(ACTCTX_SECTION_KEYED_DATA):</em><br />
In diesem Fall wird korrekt ermittelt ob ein Activation Context vorhanden ist. Das Programm läuft normal. Mit Activation Context ist kein voller Pfadname nötig. Die MFC90xxx.DLL wird evtl. aus dem WinSxS (Side by Side) geladen, oder in einem der Suchpfade gefunden.</li>
<li><em>data.cbSize </em>ist kleiner als  <em>sizeof(ACTCTX_SECTION_KEYED_DATA)</em>:<br />
In diesem Fall liefert <em>FindActCtxSectionString</em> einen Fehler und nun wird es spannend. Die DLL wird nun versucht mit dem vollen Pfadnamen zu laden um <em>Binary Planting</em> zu verhindern. Das Problem ist aber dass bei korrekter Installation im WinSxS, dass im Applikationsverzeichnis keine dieser Daten liegen. Die DLL wird nicht gefunden.<br />
Sollten die private applikationsnahe Assemblies in einem Unterverzeichnis installiert sein, werden diese auch nicht gefunden.</li>
<li>Für die Zukunft.<br />
Ein zukünftiges OS vergrößert <em>ACTCTX_SECTION_KEYED_DATA </em>und <em>data.cbSize </em>hat zufälligen Inhalt und ist größer als <em>sizeof(&#8230;)</em>:<br />
Ein Buffer-Overrun!</li>
</ol>
<p>Ich empfehle nicht ohne Grund seit <em>VS-2005 </em>private Assemblies zu verwenden, und die MFC Dateien in das Anwendungsverzeichnis zu kopieren. Dazu habe ich auf Code-Projekt einen entsprechenden Artikel geschrieben und ein Hotfix für <em>VS-2008</em> existiert auch <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /><br />
<strong><a title="Create projects easily with private MFC, ATL and CRT assemblies" href="http://www.codeproject.com/KB/cpp/PrivateAssemblyProjects.aspx">Create projects easily with private MFC, ATL and CRT assemblies</a><br />
<a title="Hotfix für UseMSPrivateAssemblies.h und VC-2008" href="http://blog.m-ri.de/index.php/2008/05/06/hotfix-fuer-usemsprivateassembliesh-und-vc-2008/">Hotfix für UseMSPrivateAssemblies.h und VC-2008</a></strong></p>
<h3>Was ist zu tun?</h3>
<p>Deinstallation aller hier erwähnten Sicherheitspatches mit den entsprechenden Arikelnummern:<br />
Runtime-2005: KB2467175, Runtime-2008: KB2467174<br />
VS-2007 SP1: KB2465367, VS-2008 SP1: KB2465361).</p>
<h3>Weitere Anmerkungen:</h3>
<p>Die betroffenen C/C++ Runtimes des <em>Visual Studio </em>haben die folgenden Versionsnummern<br />
- VC-2005 8.0.50727.5592 (KB2467175)<br />
- VC-2008 9.0.30729.5570 (KB2467174)</p>
<p>Mein Kommentar dazu:<br />
Das Leben in der DLL-Hölle war fast angenehmer als das hier. Ohne Worte <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p><strong>Herzlichen Dank auch an meinem Mit-MVP</strong><strong> Mike Ryan, der mit mir zusammen auf diese gesamte Problematik gestoßen ist <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /> </strong></p>
<p><strong>Was meine ich mit &#8220;application local&#8221;?<br />
</strong>Einige Entwickler installieren die MFC runtme Dateien im Applikationsverzeichnis. In diesem Fall werden diese DLLs nicht verwendet wenn eine neuere Version der DLLs im WinSxS Verzeichnis liegen. Das ist <strong>für mich </strong>keine applikationsnahe Instalation! Diese Manifeste im Programmverzeichnis haben immer noch einen publicKey Eintrag. Aber durch die Existenz der lokalen Dateien wird dieses hier beschriebene Problem umgangen, weil die lokalen Dateien eine Art Fallback bilden.<br />
Meine Artikel beschriben wie man eine Anwendung wirklich applikationslokal macht und damit unabhängig von solchen &#8220;kaputten&#8221; Security Patches. Dazu muss der publicKey Token aus den Manifesten entfernt werden. (Lesen Sie meinen Artikel aufCodeproject).<br />
(Danke an Co-MVP David Ching der mich um Kläurung gebeten hat)</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/04/14/bug-schwarzer-patchday-fur-alle-os-xp-und-spater-3-mfc-8-0-vc-2005-oder-mfc-9-0-vc-2008-die-dynamisch-gelinkt-wurden-finden-die-mfc-sprach-dlls-evtl-nicht-mehr-nach-installation-der-sicherhei/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Aufstellung aller Änderungen an der MFC durch VS-2010 SP1</title>
		<link>http://blog.m-ri.de/index.php/2011/03/17/aufstellung-aller-anderungen-an-der-mfc-durch-vs-2010-sp1/</link>
		<comments>http://blog.m-ri.de/index.php/2011/03/17/aufstellung-aller-anderungen-an-der-mfc-durch-vs-2010-sp1/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 20:08:22 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[COMSPEC]]></category>
		<category><![CDATA[MFCNext]]></category>
		<category><![CDATA[SP1]]></category>
		<category><![CDATA[VC-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=781</guid>
		<description><![CDATA[Ich habe mir mal die Mühe gemacht alle Änderungenan der MFC, die im VS-2010 SP1 enthalten sind, hier im Detail aufzuführen. Viele Änderungen sind es nicht, wie man schnell sieht. Ich empfehle als weitere Quelle für Infos über den SP1 die bekannten Blogs des MS-C++ Teams und die KB. http://blogs.msdn.com/b/vcblog/archive/2011/03/10/10139062.aspx http://support.microsoft.com/kb/983509 Neue Samples finden sich [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe mir mal die Mühe gemacht alle Änderungenan der <em>MFC</em>, die im <em>VS-2010 SP1 </em>enthalten sind, hier im Detail aufzuführen.</p>
<p>Viele Änderungen sind es nicht, wie man schnell sieht. Ich empfehle als weitere Quelle für Infos über den <em>SP1 </em>die bekannten Blogs des MS<em>-C++</em> Teams und die <em>KB</em>.<br />
<a href="http://blogs.msdn.com/b/vcblog/archive/2011/03/10/10139062.aspx">http://blogs.msdn.com/b/vcblog/archive/2011/03/10/10139062.aspx</a><br />
<a href="http://support.microsoft.com/kb/983509">http://support.microsoft.com/kb/983509</a></p>
<p>Neue Samples finden sich nach dem SP1 Setup auf der Festplatte im folgenden Ordner:<br />
<em>C:\Program Files\Microsoft Visual Studio 10.0\Samples\1033\VC2010SP1Samples.zip</em></p>
<p>Für entsprechende bekannte Fixes habe den Text aus den Blogs übernommen. Alle anderen Änderungen habe ich durch einen Vergleich des Sourcecode mit <em>WinMerge </em>ermittelt. Codeänderungendie ich nicht direkt einem Fehler zuordnen konnte habe ich mit dem Prefix Change, markiert und natürlich die neuen Features entsprechend.</p>
<p>In einem späteren Artikel werde ich mich noch die Änderungenan <em>CRT</em> und <em>STL</em> genauer unter die Lupe nehmen.</p>
<h3>Neues Feature: Direct2D Unterstützung (dokumentiert)</h3>
<p>Direct2D, a hardware-accelerated, immediate-mode, 2-D graphics API that provides high performance and high-quality rendering for 2-D geometry, bitmaps, and text. For more information, visit the following Microsoft website: Direct2D.<br />
<a href="http://msdn.microsoft.com/en-us/library/dd370990.aspx">http://msdn.microsoft.com/en-us/library/dd370990.aspx</a><br />
<a href="http://msdn.microsoft.com/en-us/library/gg482719.aspx">http://msdn.microsoft.com/en-us/library/gg482719.aspx</a></p>
<p>Geänderte Dateien:</p>
<ul>
<li>afx.h, afxglobals.h, afxrendertarget.h, afxwin.h</li>
<li>afxglobals.cpp, afxrendertarget.cpp, appui3.cpp, wincore.cpp</li>
</ul>
<p>Anmerkung: Die Verwendung von <em>Direct2D</em> führt dazu, dass <em>CoInitialize</em> ausgeführt wird.</p>
<h3>Neues Feature: Windows Animation Manager Unterstützung (dokumentiert)</h3>
<p>Windows Animation Manager, which enables rich animation of user interface elements. For more information, visit the following Microsoft website: Windows Animation Manager.<br />
<a href="http://msdn.microsoft.com/en-us/library/gg482719.aspx">http://msdn.microsoft.com/en-us/library/gg482719.aspx</a></p>
<p>Geänderte Dateien:</p>
<ul>
<li>afxanimationcontroller.h, afxanimationhelper.h, afxwin.h</li>
<li>afxanimationcontroller.cpp</li>
</ul>
<h3>Bugfix: Korrektur eines Fehlers in den RDX Kompontenten (dokumentiert)</h3>
<p>In the CDatabase/Crecordset MFC, the &#8220;DoFieldExchange&#8221; variable does not work correctly in Visual Studio 2010.<br />
<a href="http://connect.microsoft.com/VisualStudio/feedback/details/574974">http://connect.microsoft.com/VisualStudio/feedback/details/574974</a></p>
<p>Geänderte Dateien:</p>
<ul>
<li>dbrfx.cpp</li>
</ul>
<h3>Bugfix:  Umgang mit ﻿﻿SPI_GETNONCLIENTMETRICS in unterschiedlichen Windows Versionen (nicht dokumentiert)</h3>
<p>Der interne Umgang mit unterschiedlichen Windows Versionen und SPI_GETNONCLIENTMETRICS wurde gefixed.</p>
<p>Geänderte Dateien:</p>
<ul>
<li>afxglobals.cpp, afxribbonbar.cpp, afxvisualmanageroffice2007.cpp, afxvisualmanagerwindows7.cpp</li>
</ul>
<h3>Change: ﻿Cleanup der MFCNext Klassen (nicht dokumentiert)</h3>
<p>Das Cleanup für die neuen MFC-Next Klassen wurde geändert.</p>
<p>Geänderte Dateien:</p>
<ul>
<li>afxcontrolbarutil.h</li>
<li>afxglobals.cpp, afxwinappex.cpp, ctlmodul.cpp</li>
</ul>
<h3>Bugfix: Fehler bei Anzeige in CFormView Klassen (nicht dokumentiert)</h3>
<p>VC-2010 MFC CFormViewzeichnet Buttons beim Rollenfalsch, es erscheinen schwarze Blöcke<br />
<a href="http://blog.m-ri.de/index.php/2010/08/28/bug-vc-2010-cformview-zeichnet-buttons-beim-rollen-falsch-es-erscheinen-schwarze-bloecke/">http://blog.m-ri.de/index.php/2010/08/28/bug-vc-2010-cformview-zeichnet-buttons-beim-rollen-falsch-es-erscheinen-schwarze-bloecke/</a></p>
<p>Geänderte Dateien:</p>
<ul>
<li>afxext.h</li>
<li>viewform.cpp</li>
</ul>
<h3>Bugfix: CImageList::DrawIndirect wurde korrigiert (nicht dokumentiert)</h3>
<p>CImageList::DrawIndirect funktioniert nicht korrekt weil cbSize nicht initialisiert wurde<br />
<a href="http://blog.m-ri.de/index.php/2010/07/21/bug-in-der-mfc-von-vc-2010-in-cimagelistdrawindirect/">http://blog.m-ri.de/index.php/2010/07/21/bug-in-der-mfc-von-vc-2010-in-cimagelistdrawindirect/</a></p>
<p>Geänderte Dateien:</p>
<ul>
<li>winctrl7.cpp</li>
</ul>
<h3>Change: Änderung des Suchalgorithmus für MFC Satellite DLLs (nicht dokumentiert)</h3>
<p>Das Handling des Suchalgorithmus für die MFC Resource DLLs wurde geändert</p>
<p>Geänderte Dateien:</p>
<ul>
<li>appcore.cpp, dllinit.cpp</li>
</ul>
<p> </p>
<p><strong>PS:</strong><br />
Erstaunlich, dass zwei der Bugs, die ich zur MFC gemeldet habe auch direkt in diesem SP1 gefixed wurden. Das ist eine Quote, die ich in den letzten 12 Jahren bei einem SP noch nie hatte <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Nachtrag und Ergänzungen am 18.03.2011<br />
durch Sven von <a href="http://www.speedproject.de">http://www.speedproject.de</a></h2>
<h3>Infos zum Laden der dwmapi.dll</h3>
<p>Die Datei <em>dwmapi.dll</em> wird nun explizit aus dem Systemverzeichnis geladen.</p>
<p>Geänderte Dateien:</p>
<ul>
<li>afxglobals.cpp</li>
</ul>
<h3>Infos zum Suchalgorithmus der MFC DLLs</h3>
<p>Die Änderung des Suchalgorithmus für die zusätzlichen Sprachressourcen ist ebenfalls eine Schutzmaßname gegen das ‘Binary Planting’. Die Dlls werden jetzt nur noch aus dem Verzeichnis geladen, in dem sich die MFC-Dll befindet.</p>
<h3>Infos zu dem geänderten Clennup der MFCNext Klassen</h3>
<p>Der Grund für die Änderung beim Aufräumen ist wohl ein mögliches Speicherleck beim Beenden:<br />
<a href="http://connect.microsoft.com/VisualStudio/feedback/details/577870/cmfcbutton-causes-memory-leak">http://connect.microsoft.com/VisualStudio/feedback/details/577870/cmfcbutton-causes-memory-leak</a></p>
<p><strong>Danke Sven!</strong></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/03/17/aufstellung-aller-anderungen-an-der-mfc-durch-vs-2010-sp1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Erstaunen: CMemDC ist Bestandteil der MFC!</title>
		<link>http://blog.m-ri.de/index.php/2010/11/06/erstaunen-cmemdc-ist-bestandteil-der-mfc/</link>
		<comments>http://blog.m-ri.de/index.php/2010/11/06/erstaunen-cmemdc-ist-bestandteil-der-mfc/#comments</comments>
		<pubDate>Sat, 06 Nov 2010 19:32:19 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[Windows API]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[MFC-Next]]></category>
		<category><![CDATA[MFCNext]]></category>
		<category><![CDATA[VS-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=690</guid>
		<description><![CDATA[Wer Double Buffering benötigt und die MFC nutzt, der kennt auch CMemDC. Vermutlich eine der meist genutzten und kopierten Klassen, die auf CodeProject und CodeGuru vorgestellt wurden. http://www.codeproject.com/KB/GDI/flickerfree.aspx http://www.codeguru.com/cpp/misc/misc/flickerfreedrawing/article.php/c389/Flicker-free-drawing-using-memory-DC.htm Ich habe meine Erweiterung hier im Blog vorgestellt und die liegt normalerweise in einem separaten Namespace, wie alle meine Tool-Klassen. Nicht schlecht staunte ich, als ich keinen [...]]]></description>
			<content:encoded><![CDATA[<p>Wer Double Buffering benötigt und die <em>MFC nutzt, </em>der kennt auch <em>CMemDC</em>. Vermutlich eine der meist genutzten und kopierten Klassen, die auf <em>CodeProject </em>und <em>CodeGuru </em>vorgestellt wurden.<br />
<a href="http://www.codeproject.com/KB/GDI/flickerfree.aspx">http://www.codeproject.com/KB/GDI/flickerfree.aspx</a><br />
<a href="http://www.codeguru.com/cpp/misc/misc/flickerfreedrawing/article.php/c389/Flicker-free-drawing-using-memory-DC.htm">http://www.codeguru.com/cpp/misc/misc/flickerfreedrawing/article.php/c389/Flicker-free-drawing-using-memory-DC.htm</a></p>
<p>Ich habe meine Erweiterung <a href="http://blog.m-ri.de/index.php/2008/12/14/der-etwas-bessere-cmemdc/">hier im Blog</a> vorgestellt und die liegt normalerweise in einem separaten Namespace, wie alle meine Tool-Klassen.</p>
<p>Nicht schlecht staunte ich, als ich keinen Compilerfehler bekam obwohl ich <em>CMemDC </em>nutzte aber keinen Namespace angab. Siehe da: <em>CMemDC </em>hat in einer eigenen Implementierung den Weg in die MFC gefunden. Man findet sie in:<br />
<em>C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\afxcontrolbarutil.h</em></p>
<p>Im Großen und Ganzen ist es die bekannte Standard-Implementierung, allerdings verfügt diese <em>CMemDC </em>Version auch Code, der auf <em>Windows Vista </em>und <em>Windows 7</em>,<em> </em>die fest im Betriebssystem verankerten Funktionen nutzt: <em>BeginBufferedPaint</em>, <em>EndBufferedPaint</em><br />
Siehe <a href="http://msdn.microsoft.com/en-us/library/bb773178(VS.85).aspx">http://msdn.microsoft.com/en-us/library/bb773178(VS.85).aspx</a><br />
Diese Funktionen werden innerhalb des Themeings von <em>Windows Vista </em>und <em>Windows 7 </em>verwendet und in dieser Funktionsgruppe ist auch Alphablending direkt verankert. (<em>BufferedPaintSetAlpha</em>). Ich vermute sogar, dass diese integrierten Klassen effektiver arbeiten, als die eigenen Klassen (ein Test steht noch aus), denn Windows weiß intern natürlich viel besser was wie zu puffern und zu zeichnen ist, als wir, wenn <em>WM_PAINT </em>aufgerufen wird.</p>
<p>Vielleicht ein guter Grund, die eigene CMemDC Klasse auch auf Vista/Windows 7 Funktionen zu erweitern oder die integrierte Klasse in der MFC zu verwenden.</p>
<p>Tipp: Übrigens hat die <em>MFC CMemDC </em>Klasse einen statischen Member, der es auf einfache Weise erlaubt das Double-Buffering abzuschalten (<em>CMemDC:: m_bUseMemoryDC</em>), dass ist besonders interessant beim Debuggen von grafischen Operationen, deren Ergebnisse man auch gleich sehen will, allerdings wird dieser Member nicht benutzt wenn das interne <em>Windows Double-Buffering </em>genutzt werden kann, schade eigentlich.</p>
<p>PS: Aber eigentlich muss man sich auch die Frage stellen, warum die Entwickler genau diesen Klassennamen verwendet haben, denn er provoziert ja auch direkt den Konflikt mit existierendem Code.</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/2010/11/06/erstaunen-cmemdc-ist-bestandteil-der-mfc/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Kleiner Workarround für MFCNext in Verbindung mit CScrollView</title>
		<link>http://blog.m-ri.de/index.php/2008/10/19/kleiner-workarround-fuer-mfcnext-in-verbindung-mit-cscrollview/</link>
		<comments>http://blog.m-ri.de/index.php/2008/10/19/kleiner-workarround-fuer-mfcnext-in-verbindung-mit-cscrollview/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 17:50:09 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[MFCNext]]></category>
		<category><![CDATA[VS-2008]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=331</guid>
		<description><![CDATA[Wenn man die BCG-Library oder MFCNext aus der VC++ 9.0 SP1 nutzt erhält man einen ASSERT wenn man ein CScrollView verwendet und wenn das Programm maximiert gestartet wird. &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Microsoft Visual C++ Debug Library &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Debug Assertion Failed! Program: &#8230;\Debug\TestSDIScrollView.exe File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\viewscrl.cpp Line: 385 For information on how your program can cause an assertion failure, see [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man die <em>BCG</em>-Library oder <em>MFCNext </em>aus der VC++ 9.0 SP1 nutzt erhält man einen <em>ASSERT </em>wenn man ein <em>CScrollView </em>verwendet und wenn das Programm maximiert gestartet wird.</p>
<blockquote><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Microsoft Visual C++ Debug Library<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Debug Assertion Failed!</p>
<p>Program: &#8230;\Debug\TestSDIScrollView.exe<br />
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\viewscrl.cpp<br />
Line: 385</p>
<p>For information on how your program can cause an assertion<br />
failure, see the Visual C++ documentation on asserts.</p>
<p>(Press Retry to debug the application)<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Abbrechen   Wiederholen   Ignorieren  <br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p></blockquote>
<p>Der Grund liegt darin, dass in der <em>MFCNext </em>Implementierung schon sehr früh ein <em>RedrawWindow </em>ausgeführt wird wenn das Main Window maximiert wird. In diesem Fall wird <em>OnDraw</em>/<em>OnPaint </em>bereits ausgeführt wenn <em>SetScrollSizes</em> noch nicht aufgerufen wurde. Das geschieht ja normalerweise meistens erst in <em>OnInitialUpdate</em>.<br />
Dieser ASSERT soll dem Programmierer darauf hinweisen, dass <em>SetScrollSizes </em>unabdingbar für die korrekte Funktion des <em>CScrollView </em>notwendig ist.<br />
Leider ist in diesem alten Code ein Seiteneffekt nicht berücksichtigt worden, der durch <em>MFCNext </em>in Spiel kam.</p>
<p>Das Ganze lässt sich jedoch einfach umschiffen indem man im Konstruktor seines Views vorab <em>SetScrollSizes </em>mit Dummywerten aufruft. Die eigentliche Initialisierung mag dann später wie gewohnt in <em>OnInitialUpdate</em> erfolgen.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">CScriptEditorView<span style="color: #008080;">::</span><span style="color: #007788;">CScriptEditorView</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #666666;">// If the program is launched maximized, a RedrawWindow occurs in a very</span>
  <span style="color: #666666;">// early stage and OnDraw would be called without an initialized mapping mode</span>
  <span style="color: #666666;">// So we just do a dummy init here.</span>
  SetScrollSizes<span style="color: #008000;">&#40;</span>MM_TEXT,CSize<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><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/2008/10/19/kleiner-workarround-fuer-mfcnext-in-verbindung-mit-cscrollview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die Unsitte dialogbasierende Anwendungen zu bauen statt SDI mit CFormView zu verwenden</title>
		<link>http://blog.m-ri.de/index.php/2008/09/07/die-unsitte-dialogbasierende-anwendungen-zu-bauen-statt-sdi-mit-cformview-zu-verwenden/</link>
		<comments>http://blog.m-ri.de/index.php/2008/09/07/die-unsitte-dialogbasierende-anwendungen-zu-bauen-statt-sdi-mit-cformview-zu-verwenden/#comments</comments>
		<pubDate>Sun, 07 Sep 2008 16:37:29 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[MFCNext]]></category>
		<category><![CDATA[Unsitten]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=316</guid>
		<description><![CDATA[Es scheint mir meistens ein Anfängerfehler zu sein, dass viele MFC Entwickler (oder solche die es werden wollen) zuerst mal zu einer dialogbasierenden Anwendung greifen. Ist ja auch nett. Man kümmert sich nur um die paar Dialogfelder und hat kein Doc/View zu verwalten. Am Ende kommen aber dann noch weitere Wünsche: Ich hätte gerne ein [...]]]></description>
			<content:encoded><![CDATA[<p>Es scheint mir meistens ein Anfängerfehler zu sein, dass viele MFC Entwickler (oder solche die es werden wollen) zuerst mal zu einer dialogbasierenden Anwendung greifen.<br />
Ist ja auch nett. Man kümmert sich nur um die paar Dialogfelder und hat kein Doc/View zu verwalten.</p>
<p>Am Ende kommen aber dann noch weitere Wünsche:</p>
<ul>
<li>Ich hätte gerne ein Menü</li>
<li>Ich hätte gernenoch einen Toolbar</li>
<li>Ich hätte gerne einen Status Bar</li>
<li>Schön wäre ein Accelerator</li>
</ul>
<p>Triviales und nicht triviales schließt sich an:</p>
<ul>
<li>Warum kann ich kein Command/Routing für meinen Toolbar und mein Menü verwenden?</li>
<li>Warum schließt mein Dialog bei Nutzung Eingabe-Taste?</li>
<li>Kann ich meinen Dialog auch resizen?</li>
<li>Die Daten sollen auch gespeichert werden, wie geht das?</li>
<li>Ich hätte gerne so einen schönen <em>MFCNext</em> Toolbar in meinem Dialog, oder ein Ribbon, geht das?</li>
<li>&#8230; (die Liste ist bestimmt nicht vollständig)</li>
</ul>
<p>Gibt man dann die Antwort, dass man x Klimmzüge machen muss um so etwas in eine dialogbasierende Anwendung einzubauen (wenn es überhaupt geht), dann erntet man noch noch die stöhnende Klage: &#8220;Ohhh Mann! Ist das kompliziert!&#8221;</p>
<p>Und all das geht nur mit Mühe in einen <em>CDialog</em> einzubauen. Der Grund ist einfach: Das Commandrouting für all diese Elemente ist in <em>CFrameWnd</em> integriert. Aber ein <em>CDialog</em> leitet sich von <em>CWnd</em> ab und ist von Grunde auf für keine dieser Funktionen vorbereitet.</p>
<p>Dabei könnte alles so einfach sein!<br />
Man muss nur einfach eine <em>SDI</em> Applikation mit einem <em>CFormView</em> erzeugen und alle die Wünsche die mancher später hat, kann man sofort erfüllen und wenn man es wirklich nicht will auch weglassen.</p>
<p>Die Frage stellt sich für mich also:<br />
Warum nicht einfach immer gleich eine <em>SDI</em>/<em>CFormView</em> Anwendung bauen <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_question.gif' alt=':?:' class='wp-smiley' /><br />
Das Potential dieser Anwendungsform ist einfach unerreichbar verglichen mit einer dialogbasierenden Anwendung.</p>
<p>Also sollte man sich mal die Liste der Wünsche, die ich hier aufgestellt habe ansehen und als Checkliste betrachten. Sollte einer dieser oben aufgeführten Punkte für die Applikation wichtig sein, würde ich dringend anraten zum <em>SDI</em>/<em>CFormView</em> zu greifen.<br />
Das ist auch der Fall, wenn diese Anforderungen erst später integriert werden soll. Oft genug ist ja die dialogbasierende Anwendung schon fertig und es heißt dann: Ich möchte doch nur noch&#8230;</p>
<p>PS: Ich persönlich benutze nicht mal mehr zu Testzwecken dialogbasierende Anwendungen <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/2008/09/07/die-unsitte-dialogbasierende-anwendungen-zu-bauen-statt-sdi-mit-cformview-zu-verwenden/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>VisualStudio 2008 SP1 wird ab dem 11.08.2008 auf MSDN zum Download bereitstehen</title>
		<link>http://blog.m-ri.de/index.php/2008/08/07/visualstudio-2008-sp1-wird-ab-dem-11082008-auf-msdn-zum-download-bereitstehen/</link>
		<comments>http://blog.m-ri.de/index.php/2008/08/07/visualstudio-2008-sp1-wird-ab-dem-11082008-auf-msdn-zum-download-bereitstehen/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 17:42:17 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[MFCNext]]></category>
		<category><![CDATA[RTM]]></category>
		<category><![CDATA[SP1]]></category>
		<category><![CDATA[VS-2008]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=295</guid>
		<description><![CDATA[Die englische Version des Microsoft SQL Server 2008 wurde gestern am 06.08.2008 veröffentlicht. Auf der Startseite der MSDN Subscriptions findet sich folgende hoch interessante Information: SQL Server 2008 RTM Available for Download English downloads are available now and additional languages will be added on a daily basis. Visual Studio 2008 users will need to download [...]]]></description>
			<content:encoded><![CDATA[<p>Die englische Version des Microsoft SQL Server 2008 wurde gestern am 06.08.2008 veröffentlicht.</p>
<p>Auf der <a href="http://msdn.microsoft.com/en-us/subscriptions/default.aspx">Startseite der MSDN Subscriptions</a> findet sich folgende hoch interessante Information:</p>
<blockquote>
<h4><a id="ctl00_mainContentContainer_ctl18" title="SQL Server 2008 RTM Available for Download" onclick="Track('ctl00_mainContentContainer_ctl11|ctl00_mainContentContainer_ctl18',this);" href="http://msdn.microsoft.com/subscriptions/downloads/default.aspx?PV=42:334"><strong><span style="color: #0033cc;">SQL Server 2008 RTM Available for Download</span></strong></a></h4>
<p>English downloads are available now and additional languages will be added on a daily basis. <em><strong>Visual Studio 2008 users will need to download and install Service Pack 1 which will be available here after August 11, 2008.</strong></em></p></blockquote>
<p>Das heißt, dass wir ab Montagmorgen mit dem finalen SP1 für Visual Studio 2008 rechnen dürfen, zumindest in der englischen Version. Ich befürchte, dass die deutsche Version noch ein paar Tage mehr auf sich warten lässt.<br />
Wie immer ein Grund nur mit den englischen Entwicklungswerkzeugen zu arbeiten <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' 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/2008/08/07/visualstudio-2008-sp1-wird-ab-dem-11082008-auf-msdn-zum-download-bereitstehen/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Videos für das C++ Community Event vom 17.04 in Bad Homburg statt</title>
		<link>http://blog.m-ri.de/index.php/2008/05/27/videos-fuer-das-c-community-event-vom-1704-in-bad-homburg-statt/</link>
		<comments>http://blog.m-ri.de/index.php/2008/05/27/videos-fuer-das-c-community-event-vom-1704-in-bad-homburg-statt/#comments</comments>
		<pubDate>Tue, 27 May 2008 20:30:17 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[Featurepack]]></category>
		<category><![CDATA[MFCNext]]></category>
		<category><![CDATA[TR1]]></category>
		<category><![CDATA[VS-2008]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=266</guid>
		<description><![CDATA[Wie schon angekündigt sind nun die Videos des Community Events in Bad Homburg veröffentlicht worden. Boris Jabes aus Redmond hatte uns Einblicke aus dem VC++ Featurepack in die MFCNext, die neuen Marshalling Features und TR1 gegeben und nicht zu vergessen einige Ausblicke auf VC++ 10. Alles findet sich auf dem Blog von Christian Binder, der [...]]]></description>
			<content:encoded><![CDATA[<p>Wie schon angekündigt sind nun die Videos des <a href="http://blog.m-ri.de/index.php/2008/04/03/c-community-event-am-1704-findet-in-bad-homburg-statt/">Community Events in Bad Homburg </a>veröffentlicht worden.<br />
Boris Jabes aus Redmond hatte uns Einblicke aus dem VC++ Featurepack in die MFCNext, die neuen Marshalling Features und TR1 gegeben und nicht zu vergessen einige Ausblicke auf VC++ 10.</p>
<p>Alles findet sich auf dem Blog von <a href="http://blogs.msdn.com/cbinder">Christian Binder</a>, der das Ganze mit <a href="http://blogs.msdn.com/dparys/">Dariusz Parys</a> gefilmt hat:</p>
<p><a href="http://blogs.msdn.com/cbinder/archive/2008/05/27/videos-das-neue-c-feature-pack-und-vsts-f-r-native-c-developer.aspx">http://blogs.msdn.com/cbinder/archive/2008/05/27/videos-das-neue-c-feature-pack-und-vsts-f-r-native-c-developer.aspx</a></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/2008/05/27/videos-fuer-das-c-community-event-vom-1704-in-bad-homburg-statt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hotfix für UseMSPrivateAssemblies.h und VC-2008</title>
		<link>http://blog.m-ri.de/index.php/2008/05/06/hotfix-fuer-usemsprivateassembliesh-und-vc-2008/</link>
		<comments>http://blog.m-ri.de/index.php/2008/05/06/hotfix-fuer-usemsprivateassembliesh-und-vc-2008/#comments</comments>
		<pubDate>Tue, 06 May 2008 19:00:38 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[ATL]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[CRT]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Vista / Windows 7]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[Windows API]]></category>
		<category><![CDATA[Manifest]]></category>
		<category><![CDATA[MFCNext]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[VS-2005]]></category>
		<category><![CDATA[VS-2008]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/index.php/2008/05/06/hotfix-fuer-usemsprivateassembliesh-und-vc-2008/</guid>
		<description><![CDATA[Einige nutzen ja meine Lösung für private CRT und MFC Assemblies unter VC-2005, die ich in dem diesem Artikel unter Codeproject veröffentlicht habe http://www.codeproject.com/KB/cpp/PrivateAssemblyProjects.aspx Das Interesse und die Nachfrage ist groß dieses Verfahren auch unter VC-2008 zu nutzen. Da ich aber aktuell wenig Zeit habe den Artikel komplett zu überarbeiten, veröffentliche ich den relevanten Code [...]]]></description>
			<content:encoded><![CDATA[<p>Einige nutzen ja meine Lösung für private CRT und MFC Assemblies unter VC-2005, die ich in dem diesem Artikel unter Codeproject veröffentlicht habe<br />
<a href="http://www.codeproject.com/KB/cpp/PrivateAssemblyProjects.aspx">http://www.codeproject.com/KB/cpp/PrivateAssemblyProjects.aspx</a></p>
<p>Das Interesse und die Nachfrage ist groß dieses Verfahren auch unter VC-2008 zu nutzen.<br />
Da ich aber aktuell wenig Zeit habe den Artikel komplett zu überarbeiten, veröffentliche ich den relevanten Code hier erst mal vorab als &#8220;Hotfix&#8221;. Dieser Hotfix setzt voraus, dass das aktuelle <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d466226b-8dab-445f-a7b4-448b326c48e7&amp;displaylang=en">Feature Pack</a> installiert ist. Der Code ist nicht auf die RTM Version hin zugeschnitten und getestet.</p>
<p><strong>UseMSPrivateAssemblies.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// Version 2.0 by Martin Richter [WWJD]</span>
<span style="color: #666666;">// Supports VC-2005 and VC-2008</span>
<span style="color: #339900;">#pragma once    </span>
&nbsp;
<span style="color: #339900;">#ifndef RC_INVOKED</span>
<span style="color: #666666;">// Avoid problems with the resource compiler if included    </span>
&nbsp;
<span style="color: #666666;">// This defines bock the creation in the header files</span>
<span style="color: #339900;">#pragma message(&quot;Using private assemblies for the MS runtimes&quot;)</span>
<span style="color: #339900;">#define _STL_NOFORCE_MANIFEST</span>
<span style="color: #339900;">#define _CRT_NOFORCE_MANIFEST</span>
<span style="color: #339900;">#define _AFX_NOFORCE_MANIFEST</span>
<span style="color: #666666;">//#define _ATL_NOFORCE_MANIFEST    </span>
&nbsp;
<span style="color: #666666;">// The next statements block the linker from including object files in the</span>
<span style="color: #666666;">// CRT and the MFC, that would create manifest pragmas too.</span>
<span style="color: #339900;">#ifdef __cplusplus</span>
<span style="color: #0000ff;">extern</span> <span style="color: #FF0000;">&quot;C&quot;</span> <span style="color: #008000;">&#123;</span>            <span style="color: #ff0000; font-style: italic;">/* Assume C declarations for C++ */</span>
<span style="color: #339900;">#endif    </span>
&nbsp;
__declspec<span style="color: #008000;">&#40;</span>selectany<span style="color: #008000;">&#41;</span>       <span style="color: #0000ff;">int</span> _forceCRTManifest<span style="color: #008080;">;</span>
__declspec<span style="color: #008000;">&#40;</span>selectany<span style="color: #008000;">&#41;</span>       <span style="color: #0000ff;">int</span> _forceMFCManifest<span style="color: #008080;">;</span>
<span style="color: #666666;">// __declspec(selectany)    int _forceAtlDllManifest;    </span>
&nbsp;
<span style="color: #666666;">// The next symbols are used by the several versions of VC 9.0</span>
__declspec<span style="color: #008000;">&#40;</span>selectany<span style="color: #008000;">&#41;</span>       <span style="color: #0000ff;">int</span> _forceCRTManifestRTM<span style="color: #008080;">;</span>
__declspec<span style="color: #008000;">&#40;</span>selectany<span style="color: #008000;">&#41;</span>       <span style="color: #0000ff;">int</span> _forceMFCManifestRTM<span style="color: #008080;">;</span>
__declspec<span style="color: #008000;">&#40;</span>selectany<span style="color: #008000;">&#41;</span>       <span style="color: #0000ff;">int</span> _forceMFCManifestCUR<span style="color: #008080;">;</span>    
&nbsp;
<span style="color: #339900;">#ifdef __cplusplus</span>
<span style="color: #008000;">&#125;</span>                        <span style="color: #ff0000; font-style: italic;">/* __cplusplus */</span>
<span style="color: #339900;">#endif    </span>
&nbsp;
<span style="color: #666666;">// We use crtassem.h with the defines there. It just gives us the</span>
<span style="color: #666666;">// versions and name parts for the dependencies.</span>
<span style="color: #666666;">// Note that there is also a MFCassem.h but this include file has the</span>
<span style="color: #666666;">// manifest pragma's already in it. So we can't use it</span>
<span style="color: #666666;">//</span>
<span style="color: #666666;">// Three files are controlling this crtassem.h, MFCassem.h and atlassem.h!</span>
<span style="color: #666666;">// Happily __LIBRARIES_ASSEMBLY_NAME_PREFIX is used in CRT, MFC and ATL!</span>
<span style="color: #666666;">// Doing it right would need to use _MFC_ASSEMBLY_VERSION for the MFC</span>
<span style="color: #666666;">// but in fact _CRT_ASSEMBLY_VERSION and _MFC_ASSEMBLY_VERSION and</span>
<span style="color: #666666;">// _ATL_ASSEMBLY_VERSION are the same</span>
<span style="color: #666666;">//  - VC-2005 SP1 8.0.50727.762</span>
<span style="color: #666666;">//  - VC-2008 RTM 9.0.21022.8</span>
<span style="color: #666666;">//  - VC-2008 Feature Pack 9.0.30411.0 (used if _BIND_TO_CURRENT_VCLIBS_VERSION</span>
<span style="color: #666666;">//    and _BIND_TO_CURRENT_MFC_VERSION are defined to 1)    </span>
&nbsp;
<span style="color: #339900;">#include &lt;crtassem.h&gt;</span>
&nbsp;
<span style="color: #666666;">// We don't have a seperate block for the Debug version. We just handle</span>
<span style="color: #666666;">// this with a extra define here.</span>
<span style="color: #339900;">#ifdef _DEBUG</span>
<span style="color: #339900;">#define __LIBRARIES_SUB_VERSION    &quot;Debug&quot;</span>
<span style="color: #339900;">#else</span>
<span style="color: #339900;">#define __LIBRARIES_SUB_VERSION    &quot;&quot;</span>
<span style="color: #339900;">#endif    </span>
&nbsp;
<span style="color: #666666;">// Manifest for the CRT</span>
<span style="color: #339900;">#pragma comment(linker,&quot;/manifestdependency:\&quot;type='win32' &quot;                        \
    &quot;name='&quot; __LIBRARIES_ASSEMBLY_NAME_PREFIX &quot;.&quot; __LIBRARIES_SUB_VERSION &quot;CRT' &quot;   \
    &quot;version='&quot; _CRT_ASSEMBLY_VERSION &quot;' &quot;                                          \
    &quot;processorArchitecture='x86' \&quot;&quot;)    </span>
&nbsp;
<span style="color: #666666;">// Manifest for the MFC</span>
<span style="color: #339900;">#pragma comment(linker,&quot;/manifestdependency:\&quot;type='win32' &quot;                        \
    &quot;name='&quot; __LIBRARIES_ASSEMBLY_NAME_PREFIX &quot;.&quot; __LIBRARIES_SUB_VERSION &quot;MFC' &quot;   \
    &quot;version='&quot; _CRT_ASSEMBLY_VERSION &quot;' &quot;                                          \
    &quot;processorArchitecture='x86'\&quot;&quot;)    </span>
&nbsp;
<span style="color: #666666;">// #pragma comment(linker,&quot;/manifestdependency:\&quot;type='win32' &quot;                     \
//     &quot;name='&quot; __LIBRARIES_ASSEMBLY_NAME_PREFIX &quot;.MFCLOC' &quot;                        \
//     &quot;version='&quot; _CRT_ASSEMBLY_VERSION &quot;' &quot;                                       \
//     &quot;processorArchitecture='x86'\&quot;&quot;)    </span>
&nbsp;
<span style="color: #666666;">// Manifest for the ATL</span>
<span style="color: #666666;">// #pragma comment(linker,&quot;/manifestdependency:\&quot;type='win32' &quot;                     \
//    &quot;name='&quot; __LIBRARIES_ASSEMBLY_NAME_PREFIX &quot;.ATL' &quot;                            \
//    &quot;version='&quot; _CRT_ASSEMBLY_VERSION &quot;' &quot;                                        \
//    &quot;processorArchitecture='x86' \&quot;&quot;)    </span>
&nbsp;
<span style="color: #339900;">#endif // RC_INVOKED</span></pre></td></tr></table></div>

<p><strong>Anmerkungen:</strong></p>
<ul>
<li>Im Endeffekt sind nur 3 Zeilen (26-28) hinzugekommen.</li>
<li>Diese Version funktioniert sowohl für VC-2005 als auch VC-2008!</li>
<li>Unter Vista wird allgemein das Problem beobachtet, das private Assemblies nur genutzt werden können, wenn diese in einem Unterverzeichnis liegen. Liegen die Assembly Dateien im gleichen Verzeichnis wie die EXE kommt es zu einem Fehler <em>&#8220;The application failed to initialize properly (0xc0000034). &#8220;</em> Dieser Sache bin ich (und andere) auf der Spur.</li>
<li>Es spielt für diesen Code keine Rolle ob die beiden Defines <em>_BIND_TO_CURRENT_VCLIBS_VERSION </em>und <em>_BIND_TO_CURRENT_MFC_VERSION </em>gesetzt wurden. Werden diese Defines auf 1 gesetzt bevor UseMSPrivateAssemblies inkludiert wird, dann werden die Manifeste so erzeugt, dass die Feature Pack DLLs gezogen werden. Sind diese beiden Defines nicht gesetzt werden Manifeste für die RTM Version erzeugt.<br />
Ich empfehle dringend diese beiden Defines zu setzen <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /> </li>
</ul>
<p>Das ist erstmal ein Schnellschuss für alle, die die es etwas eiliger haben.</p>
<p>Der Vorteil gegenüber der Lösung, bei der die Manifeste manuell bearbeitet werden, wie es zum Beispiel <a href="http://blog.kalmbach-software.de/2008/05/03/howto-deploy-vc2008-apps-without-installing-vcredist_x86exe/">Jochen Kalmbach in seinem Blog</a> vorgestellt hat ist klar:<br />
Man muss eben nichts manuell machen <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Es macht wieder alles der Compiler und Linker.</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/2008/05/06/hotfix-fuer-usemsprivateassembliesh-und-vc-2008/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Der zweite Versuch: Visual C++ 2008 Feature Pack Refresh (MFCNext &amp; TR1)</title>
		<link>http://blog.m-ri.de/index.php/2008/04/23/der-zweite-versuch-visual-c-2008-feature-pack-refresh-mfcnext-tr1/</link>
		<comments>http://blog.m-ri.de/index.php/2008/04/23/der-zweite-versuch-visual-c-2008-feature-pack-refresh-mfcnext-tr1/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 07:29:52 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[MFCNext]]></category>
		<category><![CDATA[TR1]]></category>
		<category><![CDATA[VS-2008]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/index.php/2008/04/23/der-zweite-versuch-visual-c-2008-feature-pack-refresh-mfcnext-tr1/</guid>
		<description><![CDATA[Nach dem ersten Versuch nun der zweite Versuch. Alle bisher bekannten Installationsprobleme sind gefixed. Weitere Infos: http://blogs.msdn.com/vcblog/archive/2008/04/22/visual-c-2008-feature-pack-refresh.aspx Download: http://www.microsoft.com/downloads/details.aspx?FamilyID=d466226b-8dab-445f-a7b4-448b326c48e7&#38;displaylang=en Das bereits installierte Feature Pack muss deinstalliert werden! Glücklich wer nur die Beta bisher installiert hat, der kann wie bisher einfach drüber installieren. :!: BTW: Eine Responsezeit von 16 Tagen ist gar nicht soooo schlecht Copyright &#169; [...]]]></description>
			<content:encoded><![CDATA[<p>Nach dem ersten Versuch nun der zweite Versuch. Alle bisher bekannten Installationsprobleme sind gefixed.</p>
<p>Weitere Infos: <a href="http://blogs.msdn.com/vcblog/archive/2008/04/22/visual-c-2008-feature-pack-refresh.aspx">http://blogs.msdn.com/vcblog/archive/2008/04/22/visual-c-2008-feature-pack-refresh.aspx</a></p>
<p>Download: <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d466226b-8dab-445f-a7b4-448b326c48e7&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?FamilyID=d466226b-8dab-445f-a7b4-448b326c48e7&amp;displaylang=en</a></p>
<p> <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' />  <strong>Das bereits installierte Feature Pack muss deinstalliert werden!</strong> Glücklich wer nur die Beta bisher installiert hat, der kann wie bisher einfach drüber installieren. :!:</p>
<p>BTW: Eine Responsezeit von 16 Tagen ist gar nicht soooo schlecht <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/2008/04/23/der-zweite-versuch-visual-c-2008-feature-pack-refresh-mfcnext-tr1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2008 Feature Pain&#8230;</title>
		<link>http://blog.m-ri.de/index.php/2008/04/13/visual-studio-2008-feature-pain/</link>
		<comments>http://blog.m-ri.de/index.php/2008/04/13/visual-studio-2008-feature-pain/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 16:55:15 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[MFCNext]]></category>
		<category><![CDATA[VS-2008]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/index.php/2008/04/13/visual-studio-2008-feature-pain/</guid>
		<description><![CDATA[Hier die bisherige offizielle Bug-Liste des gerade veröffentlichten Feature Packs: http://blogs.msdn.com/vcblog/archive/2008/04/12/visual-c-2008-feature-pack-setup-deployment-issues.aspx Mit Ruhm hat sich Microsoft hier wirklich nicht bekleckert. Vor allem ist das Feature Pack ohne ein funktionierendes Deployment für Vista erstmal wertlos&#8230; In der Haut derjenigen, die das Setup und Deployment zu verantworten haben möchte ich nicht stecken. Leider ist das Ganze wieder [...]]]></description>
			<content:encoded><![CDATA[<p>Hier die bisherige offizielle Bug-Liste des gerade veröffentlichten Feature Packs:</p>
<p><a href="http://blogs.msdn.com/vcblog/archive/2008/04/12/visual-c-2008-feature-pack-setup-deployment-issues.aspx">http://blogs.msdn.com/vcblog/archive/2008/04/12/visual-c-2008-feature-pack-setup-deployment-issues.aspx</a></p>
<p>Mit Ruhm hat sich Microsoft hier wirklich nicht bekleckert.<br />
Vor allem ist das Feature Pack ohne ein funktionierendes Deployment für Vista erstmal wertlos&#8230;</p>
<p>In der Haut derjenigen, die das Setup und Deployment zu verantworten haben möchte ich nicht stecken.</p>
<p>Leider ist das Ganze wieder mal nicht ganz vertrauenserweckend. Man kann ja jetzt nur hoffen, dass der Rest des Packs mit nicht ganz so heißer Nadel gestrickt wurde. Die nächste Zeit wird es zeigen.</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/2008/04/13/visual-studio-2008-feature-pain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

