created and maintained by tokd

HowToBuildDonutL

DonutL をフリーの開発環境でコンパイルするための手順

-「Visual C++ 2005 Express Edition 日本語版」をインストール
> http://www.microsoft.com/japan/msdn/vstudio/express/visualc/

-「Visual C++ 2005 Express Edition SP1- VS80sp1-KB926748-X86-INTL.exe」をインストール
> http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/vs2005/sp1/

- C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults\corewin_express.vsprops の修正(参考 http://www.atmarkit.co.jp/fwcr/special/custom_browser/01.html


--- corewin_express.vsprops.orig	2006-12-21 17:06:35.431808000 +0900
+++ corewin_express.vsprops	2006-12-20 13:13:00.022035200 +0900
@@ -5,5 +5,5 @@
 	Name="Core Windows Libraries">
 	<Tool 
 		Name="VCLinkerTool" 
-		AdditionalDependencies="kernel32.lib" />
+		AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib" />
 </VisualStudioPropertySheet>

-「Microsoft Windows Server 2003 R2 Platform SDK - March 2006 Edition」から Microsoft Core SDK, Microsoft Web Workshop (IE) SDK, Microsoft Data Access Services (MDAC) SDK の Build Environment をインストール
> http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&displaylang=en

- C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\atl にインストールされている ATL 3.0 の修正(参考 http://www.atmarkit.co.jp/fwcr/special/custom_browser/01.html


diff -ur atl_dist/atlbase.h atl/atlbase.h
--- atl_dist/atlbase.h	2006-03-03 23:19:12.000000000 +0900
+++ atl/atlbase.h	2006-12-20 13:08:17.035120000 +0900
@@ -284,13 +284,15 @@
 };
 #pragma pack(pop)
 
-PVOID __stdcall __AllocStdCallThunk(VOID);
-VOID  __stdcall __FreeStdCallThunk(PVOID);
+//PVOID __stdcall __AllocStdCallThunk(VOID);
+//VOID  __stdcall __FreeStdCallThunk(PVOID);
 
-#define AllocStdCallThunk() __AllocStdCallThunk()
-#define FreeStdCallThunk(p) __FreeStdCallThunk(p)
+//#define AllocStdCallThunk() __AllocStdCallThunk()
+//#define FreeStdCallThunk(p) __FreeStdCallThunk(p)
+#define AllocStdCallThunk() HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONS,sizeof(_stdcallthunk))
+#define FreeStdCallThunk(p) HeapFree(GetProcessHeap(),0,p)
 
-#pragma comment(lib, "atlthunk.lib")
+//#pragma comment(lib, "atlthunk.lib")
 
 #elif defined (_M_AMD64)
 #pragma pack(push,2)
diff -ur atl_dist/atlwin.h atl/atlwin.h
--- atl_dist/atlwin.h	2006-03-03 23:19:14.000000000 +0900
+++ atl/atlwin.h	2006-12-20 11:53:14.315268800 +0900
@@ -1750,7 +1750,7 @@
 
         // search for an empty one
 
-                for(i = 0; i < m_aChainEntry.GetSize(); i++)
+                for(int i = 0; i < m_aChainEntry.GetSize(); i++)
                 {
                         if(m_aChainEntry[i] == NULL)
                         {

-「Windows Template Library - WTL 8.0.6304」を展開し WTL80 にリネームして C:\Program Files に移動
> http://sourceforge.net/projects/wtl

- Donut L のソースを入手し適当なディレクトリに展開(http://www.atmark.gr.jp/~s2000/r/files/src/DonutL31_src.cab

- Donut L31 のソースを修正


diff -ur DonutL31_src/WtlFixed/atlmisc.h DonutL31_hacked/WtlFixed/atlmisc.h
--- DonutL31_src/WtlFixed/atlmisc.h	2003-10-04 15:04:56.000000000 +0900
+++ DonutL31_hacked/WtlFixed/atlmisc.h	2006-12-20 11:54:47.018569600 +0900
@@ -3457,7 +3457,8 @@
 inline bool _IsDBCSTrailByte(LPCTSTR lpstr, int nChar)
 {
 #ifndef _UNICODE
-	for(int i = nChar; i > 0; i--)
+	int i;
+	for(i = nChar; i > 0; i--)
 	{
 		if(!::IsDBCSLeadByte(lpstr[i - 1]))
 			break;
@@ -3529,7 +3530,8 @@
 	// handle just ellipsis
 	if((cchLen < (cchMidEllipsis + cchEndEllipsis)))
 	{
-		for(int i = 0; i < cchLen - 1; i++)
+		int i;
+		for(i = 0; i < cchLen - 1; i++)
 			lpstrOut[i] = ((i + 1) == cchMidEllipsis) ? chSlash : _T('.');
 		lpstrOut[i] = 0;
 		return true;
diff -ur DonutL31_src/aboutdlg.h DonutL31_hacked/aboutdlg.h
--- DonutL31_src/aboutdlg.h	2006-06-07 00:09:58.000000000 +0900
+++ DonutL31_hacked/aboutdlg.h	2006-12-20 12:45:01.388278400 +0900
@@ -125,6 +125,7 @@
 		if (!hInstHelp) {
 			hCursor = LoadCursor(NULL, IDC_ARROW);
 		} else {
+#define CopyCursor(pcur) ((HCURSOR)CopyIcon((HICON)(pcur)))
 			hCursor = CopyCursor(LoadCursor(hInstHelp, MAKEINTRESOURCE(106)));
 			FreeLibrary(hInstHelp);
 		}
diff -ur DonutL31_src/DonutFavoritesMenu.h DonutL31_hacked/DonutFavoritesMenu.h
--- DonutL31_src/DonutFavoritesMenu.h	2006-01-12 16:45:54.000000000 +0900
+++ DonutL31_hacked/DonutFavoritesMenu.h	2006-12-20 12:02:05.564425600 +0900
@@ -4,7 +4,7 @@
 #include "FavoritesMenu.h"
 
 template <class _MainFrame>
-class CDonutFavoritesMenu : public CFavoritesMenu<CDonutFavoritesMenu>
+class CDonutFavoritesMenu : public CFavoritesMenu<CDonutFavoritesMenu<_MainFrame>>
 {
 public:
 	_MainFrame* __m_pMainFrame;
diff -ur DonutL31_src/DonutLinksBarCtrl.h DonutL31_hacked/DonutLinksBarCtrl.h
--- DonutL31_src/DonutLinksBarCtrl.h	2006-01-05 20:12:16.000000000 +0900
+++ DonutL31_hacked/DonutLinksBarCtrl.h	2006-12-20 12:02:05.724656000 +0900
@@ -51,7 +51,7 @@
 
 /////////////////////////////////////////////////////////////////////////////
 template <class _MainFrame>
-class CDonutLinksBarCtrl : public COleDragDrogExplorerToolBarCtrlImpl<CDonutLinksBarCtrl>
+class CDonutLinksBarCtrl : public COleDragDrogExplorerToolBarCtrlImpl<CDonutLinksBarCtrl<_MainFrame>>
 {
 public:
 	DECLARE_WND_SUPERCLASS(_T("Donut_LinksBar"), GetWndClassName())
diff -ur DonutL31_src/ExplorerToolBarCtrl.h DonutL31_hacked/ExplorerToolBarCtrl.h
--- DonutL31_src/ExplorerToolBarCtrl.h	2006-04-05 15:07:56.000000000 +0900
+++ DonutL31_hacked/ExplorerToolBarCtrl.h	2006-12-20 12:47:19.957531200 +0900
@@ -11,7 +11,7 @@
 #include "PropertyExDlg.h"
 
 template <class _ExpBar>
-class CExpBarMenu : public CFavoritesMenu<CExpBarMenu>
+class CExpBarMenu : public CFavoritesMenu<CExpBarMenu<_ExpBar>>
 {
 public:
 	_ExpBar* __m_pExpBar;
@@ -325,7 +325,7 @@
 		info.cbSize = sizeof(info);
 		::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(info), &info, 0);
 		
-		CLogFont logfont;
+		MTL::CLogFont logfont;
 		logfont.InitDefault();
 
 		if(m_font.m_hFont != NULL)
diff -ur DonutL31_src/ExplorerTreeViewCtrl.h DonutL31_hacked/ExplorerTreeViewCtrl.h
--- DonutL31_src/ExplorerTreeViewCtrl.h	2006-04-05 15:08:26.000000000 +0900
+++ DonutL31_hacked/ExplorerTreeViewCtrl.h	2006-12-20 12:03:13.592244800 +0900
@@ -707,7 +707,7 @@
 		ATLASSERT(GetChildItem(hItemParent) == NULL);
 	}
 
-	static _TreeItemMask(TVITEM& item, ULONG dwAttributes)
+	static void _TreeItemMask(TVITEM& item, ULONG dwAttributes)
 	{
 		if (dwAttributes & SFGAO_LINK){
 			item.mask |= TVIF_STATE;
diff -ur DonutL31_src/FavTreeViewCtrl.h DonutL31_hacked/FavTreeViewCtrl.h
--- DonutL31_src/FavTreeViewCtrl.h	2006-03-29 02:37:34.000000000 +0900
+++ DonutL31_hacked/FavTreeViewCtrl.h	2006-12-20 12:02:05.684598400 +0900
@@ -369,8 +369,8 @@
 template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
 class CDonutFavoritesBarImpl : 
 	public CWindowImpl< T, TBase, TWinTraits >,
-	public CChevronHandler<CDonutFavoritesBarImpl>,
-	public CUpdateCmdUI<CDonutFavoritesBarImpl>
+	public CChevronHandler<CDonutFavoritesBarImpl<T, TBase, TWinTraits>>,
+	public CUpdateCmdUI<CDonutFavoritesBarImpl<T, TBase, TWinTraits>>
 {
 public:
 	DECLARE_WND_CLASS_EX(NULL, 0, -1)
diff -ur DonutL31_src/FavoriteMenu.h DonutL31_hacked/FavoriteMenu.h
--- DonutL31_src/FavoriteMenu.h	2006-03-29 02:26:26.000000000 +0900
+++ DonutL31_hacked/FavoriteMenu.h	2006-12-20 12:02:05.764713600 +0900
@@ -32,7 +32,7 @@
 }
 
 template <class _MainFrame>
-class CFavoriteGroupMenu : public CExplorerMenuImpl<CFavoriteGroupMenu>
+class CFavoriteGroupMenu : public CExplorerMenuImpl<CFavoriteGroupMenu<_MainFrame>>
 {
 public:
 	_MainFrame* __m_pMainFrame;
@@ -65,7 +65,7 @@
 
 
 template <class _ChildFrame>
-class CChildFavoriteMenu : public CFavoritesMenu<CChildFavoriteMenu>
+class CChildFavoriteMenu : public CFavoritesMenu<CChildFavoriteMenu<_ChildFrame>>
 {
 public:
 	_ChildFrame* __m_pChildFrame;
diff -ur DonutL31_src/IDocHostUIHandlerDispatchImpl.h DonutL31_hacked/IDocHostUIHandlerDispatchImpl.h
--- DonutL31_src/IDocHostUIHandlerDispatchImpl.h	2004-04-11 02:19:30.000000000 +0900
+++ DonutL31_hacked/IDocHostUIHandlerDispatchImpl.h	2006-12-20 12:02:05.063705600 +0900
@@ -22,7 +22,7 @@
 	STDMETHOD(_LocDHUHQueryInterface)(REFIID riid, void ** ppvObject)
 	{
 		if (InlineIsEqualUnknown(riid) ||
-			ATL::InlineIsEqualGUID(riid, IID_IDocHostUIHandlerDispatch))
+			InlineIsEqualGUID(riid, IID_IDocHostUIHandlerDispatch))
 		{
 			if (ppvObject == NULL)
 				return E_POINTER;
diff -ur DonutL31_src/MtlBrowser.h DonutL31_hacked/MtlBrowser.h
--- DonutL31_src/MtlBrowser.h	2006-10-21 02:03:50.000000000 +0900
+++ DonutL31_hacked/MtlBrowser.h	2006-12-20 12:46:38.758289600 +0900
@@ -710,7 +710,7 @@
 
 template <class T, UINT nID>
 class IWebBrowserEvents2Impl :
-	public IDispEventSimpleImpl<nID, IWebBrowserEvents2Impl, &DIID_DWebBrowserEvents2>,
+	public IDispEventSimpleImpl<nID, IWebBrowserEvents2Impl<T, nID>, &DIID_DWebBrowserEvents2>,
 	public IWebBrowserEvents2Base
 {
 public:
@@ -798,27 +798,27 @@
 
 // Sink map and event handlers
 	BEGIN_SINK_MAP(thisClass)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 102, __StatusTextChange, &StatusTextChangeInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 108, __ProgressChange, &ProgressChangeInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 105, __CommandStateChange, &CommandStateChangeInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 106, __DownloadBegin, &DownloadBeginInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 104, __DownloadComplete, &DownloadBeginInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 113, __TitleChange, &StatusTextChangeInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 252, __NavigateComplete2, &NavigateComlete2Info)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 250, __BeforeNavigate2, &BeforeNavigate2Info)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 112, __PropertyChange, &StatusTextChangeInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 251, __NewWindow2, &NewWindow2Info)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 259, __DocumentComplete, &NavigateComlete2Info)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 253, __OnQuit, &DownloadBeginInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 254, __OnVisible, &OnVisibleInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 255, __OnToolBar, &OnVisibleInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 256, __OnMenuBar, &OnVisibleInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 257, __OnStatusBar, &OnVisibleInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 258, __OnFullScreen, &OnVisibleInfo)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 260, __OnTheaterMode, &OnVisibleInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 102, &__StatusTextChange, &StatusTextChangeInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 108, &__ProgressChange, &ProgressChangeInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 105, &__CommandStateChange, &CommandStateChangeInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 106, &__DownloadBegin, &DownloadBeginInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 104, &__DownloadComplete, &DownloadBeginInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 113, &__TitleChange, &StatusTextChangeInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 252, &__NavigateComplete2, &NavigateComlete2Info)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 250, &__BeforeNavigate2, &BeforeNavigate2Info)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 112, &__PropertyChange, &StatusTextChangeInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 251, &__NewWindow2, &NewWindow2Info)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 259, &__DocumentComplete, &NavigateComlete2Info)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 253, &__OnQuit, &DownloadBeginInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 254, &__OnVisible, &OnVisibleInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 255, &__OnToolBar, &OnVisibleInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 256, &__OnMenuBar, &OnVisibleInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 257, &__OnStatusBar, &OnVisibleInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 258, &__OnFullScreen, &OnVisibleInfo)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 260, &__OnTheaterMode, &OnVisibleInfo)
 		// --20--
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 269, __OnSetSecureLockIcon, &OnSecureLockIcon)
-		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 272, __OnPrivacyImpactedStateChange, &PrivacyImpactedStateChange)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 269, &__OnSetSecureLockIcon, &OnSecureLockIcon)
+		SINK_ENTRY_INFO(nID, DIID_DWebBrowserEvents2, 272, &__OnPrivacyImpactedStateChange, &PrivacyImpactedStateChange)
 		// ENDE
 	END_SINK_MAP()
 
diff -ur DonutL31_src/MtlCtrlw.h DonutL31_hacked/MtlCtrlw.h
--- DonutL31_src/MtlCtrlw.h	2001-09-11 12:24:08.000000000 +0900
+++ DonutL31_hacked/MtlCtrlw.h	2006-12-20 12:03:13.411985600 +0900
@@ -207,7 +207,7 @@
 template <class T, class TBase = CCommandBarCtrl2Base, class TWinTraits = CControlWinTraits>
 class ATL_NO_VTABLE CCommandBarCtrl2Impl :
 	public CWindowImpl< T, TBase, TWinTraits >,
-	public CTrackMouseLeave<CCommandBarCtrl2Impl>
+	public CTrackMouseLeave<CCommandBarCtrl2Impl<T, TBase, TWinTraits>>
 {
 public:
 	DECLARE_WND_CLASS_EX(NULL, 0, -1)
diff -ur DonutL31_src/MtlDragDrop.h DonutL31_hacked/MtlDragDrop.h
--- DonutL31_src/MtlDragDrop.h	2001-09-11 12:24:08.000000000 +0900
+++ DonutL31_hacked/MtlDragDrop.h	2006-12-20 12:03:13.411985600 +0900
@@ -87,7 +87,7 @@
 	STDMETHOD(_LocDSQueryInterface)(REFIID riid, void ** ppvObject)
 	{
 		if (InlineIsEqualUnknown(riid) ||
-			ATL::InlineIsEqualGUID(riid, IID_IDropSource))
+			InlineIsEqualGUID(riid, IID_IDropSource))
 		{
 			if (ppvObject == NULL)
 				return E_POINTER;
@@ -452,7 +452,7 @@
 	STDMETHOD(_LocDTQueryInterface)(REFIID riid, void ** ppvObject)
 	{
 		if (InlineIsEqualUnknown(riid) ||
-			ATL::InlineIsEqualGUID(riid, IID_IDropTarget))
+			InlineIsEqualGUID(riid, IID_IDropTarget))
 		{
 			if (ppvObject == NULL)
 				return E_POINTER;
diff -ur DonutL31_src/MtlFile.h DonutL31_hacked/MtlFile.h
--- DonutL31_src/MtlFile.h	2001-09-11 12:24:08.000000000 +0900
+++ DonutL31_hacked/MtlFile.h	2006-12-20 12:03:13.411985600 +0900
@@ -342,7 +342,8 @@
 	LPTSTR lpsz = (LPTSTR)_alloca(nLen * sizeof(TCHAR));
 	::lstrcpy(lpsz, str_);
 		
-	for (LPCTSTR lpszRunner = lpsz; *lpszRunner != _T('\0'); lpszRunner = ::CharNext(lpszRunner)) {
+	LPCTSTR lpszRunner;
+	for (lpszRunner = lpsz; *lpszRunner != _T('\0'); lpszRunner = ::CharNext(lpszRunner)) {
 		if (!Mtl_isalpha(*lpszRunner))
 			break;
 	}
@@ -359,7 +360,8 @@
 	LPTSTR lpsz = (LPTSTR)_alloca(nLen * sizeof(TCHAR));
 	::lstrcpy(lpsz, str);
 		
-	for (LPCTSTR lpszRunner = lpsz; *lpszRunner != _T('\0'); lpszRunner = ::CharNext(lpszRunner)) {
+	LPCTSTR lpszRunner;
+	for (lpszRunner = lpsz; *lpszRunner != _T('\0'); lpszRunner = ::CharNext(lpszRunner)) {
 		if (Mtl_isalpha(*lpszRunner))
 			break;
 	}
diff -ur DonutL31_src/MtlMisc.h DonutL31_hacked/MtlMisc.h
--- DonutL31_src/MtlMisc.h	2005-11-23 09:41:54.000000000 +0900
+++ DonutL31_hacked/MtlMisc.h	2006-12-20 11:56:33.982376000 +0900
@@ -691,7 +691,8 @@
 	// handle just ellipsis
 	if((cchLen < (cchMidEllipsis + cchEndEllipsis)))
 	{
-		for(int i = 0; i < cchLen - 1; ++i)
+		int i;
+		for(i = 0; i < cchLen - 1; ++i)
 			lpstrOut[i] = ((i + 1) == cchMidEllipsis) ? chSlash : _T('.');
 		lpstrOut[i] = 0;
 		return true;
diff -ur DonutL31_src/MtlWeb.h DonutL31_hacked/MtlWeb.h
--- DonutL31_src/MtlWeb.h	2006-10-21 02:09:34.000000000 +0900
+++ DonutL31_hacked/MtlWeb.h	2006-12-20 12:02:05.384166400 +0900
@@ -355,7 +355,7 @@
 }
 #endif
 
-inline MtlShowInternetOptions()
+inline void MtlShowInternetOptions()
 {// this is modeless
 	::ShellExecute(0, _T("open"), _T("control.exe"), _T("inetcpl.cpl"), _T("."), SW_SHOW);
 }
@@ -1255,7 +1255,7 @@
 void MtlGetFavoritesOrder(CFavoritesOrder& order, const CString& strDirPath)
 {
 	ATLASSERT(!strDirPath.IsEmpty());
-	const s_unknownOffset = 12;
+	const int s_unknownOffset = 12;
 
 	CString strRoot;
 	if (!MtlGetFavoritesFolder(strRoot))
diff -ur DonutL31_src/Rapt.h DonutL31_hacked/Rapt.h
--- DonutL31_src/Rapt.h	2003-09-03 01:07:46.000000000 +0900
+++ DonutL31_hacked/Rapt.h	2006-12-20 12:35:17.608844800 +0900
@@ -138,7 +138,7 @@
 			lstrcpy(s_szExternalAppPath[i], _T(""));
 
 		pr.Open(g_szIniFileName, _T("RAPT"));
-		for (i = 0; i < 10; ++i) {
+		for (int i = 0; i < 10; ++i) {
 			CString strKey;
 			strKey.Format(_T("ExternalAppPath%d"), i);
 			pr.QueryValue(s_szExternalAppPath[i], strKey, &dwCount);
@@ -379,7 +379,7 @@
 	// bVisible[i] == false なMenuID[i]をメニューから削除する
 	// ただし、全部falseの場合は、0番目のみ表示させる
 	int nBegin = 1;
-	for (i = 0; i < MAX_SEARCHURL_COUNT; ++i) {
+	for (int i = 0; i < MAX_SEARCHURL_COUNT; ++i) {
 		if (bVisible[i]) {
 			nBegin = 0;
 			break;
@@ -387,7 +387,7 @@
 	}
 	if (nBegin != 0)
 		menu->ModifyMenu(hMenuID[0], MF_BYCOMMAND, hMenuID[0], _T("&0 (none)"));
-	for (i = nBegin; i < MAX_SEARCHURL_COUNT; ++i) {
+	for (int i = nBegin; i < MAX_SEARCHURL_COUNT; ++i) {
 		if (!bVisible[i])
 			menu->RemoveMenu(hMenuID[i], MF_BYCOMMAND);
 	}
@@ -425,7 +425,7 @@
 	// bVisible[i] == false なMenuID[i]をメニューから削除する
 	// ただし、全部falseの場合は、0番目のみ表示させる
 	int nBegin = 1;
-	for (i = 0; i < 10; ++i) {
+	for (int i = 0; i < 10; ++i) {
 		if (bVisible[i]) {
 			nBegin = 0;
 			break;
@@ -433,7 +433,7 @@
 	}
 	if (nBegin > 0)
 		menu->ModifyMenu(hMenuID[0], MF_BYCOMMAND, hMenuID[0], _T("&0 (none)"));
-	for (i = nBegin; i < 10; ++i) {
+	for (int i = nBegin; i < 10; ++i) {
 		if (!bVisible[i])
 			menu->RemoveMenu(hMenuID[i], MF_BYCOMMAND);
 	}
diff -ur DonutL31_src/TabCtrl.h DonutL31_hacked/TabCtrl.h
--- DonutL31_src/TabCtrl.h	2006-06-17 14:37:00.000000000 +0900
+++ DonutL31_hacked/TabCtrl.h	2006-12-20 12:02:05.814785600 +0900
@@ -267,7 +267,7 @@
 template <class T, class TBase = CTabCtrl2Base, class TWinTraits = CControlWinTraits>
 class ATL_NO_VTABLE CTabCtrl2Impl :
 	public CWindowImpl< T, TBase, TWinTraits >,
-	public CTrackMouseLeave<CTabCtrl2Impl>
+	public CTrackMouseLeave<CTabCtrl2Impl<T, TBase, TWinTraits>>
 {
 public:
 	DECLARE_WND_CLASS_EX(NULL, CS_DBLCLKS, -1)

- 最初は Donut.dsw をダブルクリックして VC++ を起動
-- 「変換してこのプロジェクトを開きますか?」で「はい」を選択
-- [ビルド] -> [構成マネージャ] -> [アクティブ ソリューション構成] を Debug から Release に変更

- (開発環境や個人の好みに応じて)最適化オプションを変更
-- [プロジェクト] -> [Donut のプロパティ] -> [構成プロパティ] -> [C/C++] -> [コマンドライン] -> [追加のオプション] を /O /Zm400 から /O2 /GS- /fp:fast /GL /GA /arch:SSE2 /Zm400 に変更
-- [プロジェクト] -> [Donut のプロパティ] -> [構成プロパティ] -> [リンカ] -> [コマンドライン] -> [追加のオプション] に /LTCG を追加

- [ツール] -> [オプション] -> [プロジェクトおよびソリューション] -> [VC++ ディレクトリ] -> [ディレクトリを表示するプロジェクト]
-- [インクルードファイル] を選択し以下を追加
--- C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include
--- C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\atl
--- C:\Program Files\WTL80\include\atl
-- [ライブラリファイル] を選択し以下を追加
--- C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib

- [ビルド] -> [ソリューションのビルド] を実行
-- Release\Donut.exe が出来れば O.K.

- 以後は Donut.sln をダブルクリックして Visual C++ を起動すること