#contents
----
Microsoft VisualC++に関するまとめ。と言いつつ現状Native開発のみでC++/CLIな情報は無し。
-[[link集/Microsoft関連]]
-[[link集/開発言語系/C++]]
-[[link集/OS系/Microsoft Windows]]
-[[link集/OS系/RTOS#RTOS_Windows]]
-[[link集/DirectX]]
-[[OpenGL]]
-[[link集/ライブラリ系#VB]]
-[[link集/ライブラリ系#COM]]
-[[link集/ライブラリ系/C++]]

*Version [#Version]
||CENTER:|CENTER:|CENTER:|c
|CENTER:VisualC++ Version|Compiler(_MSC_VER)|MFC(_MFC_VER) ((afxver_.hにて定義))|ATL(_ATL_VER) ((atldef.hにて定義))|h
|VisualC++ 6.0|1200|0x0600|0x0300|
|eMbedded VisualC++ 4.0|1200|0x0600|0x0300|
|VisualC++ .NET 2002|1300|0x0700|0x0700|
|VisualC++ .NET 2003|1310|0x0710|0x0710|
|VisualC++ 2005|1400|0x0800|0x0800|
|VisualC++ 2008|1500|0x0900|0x0900|
|VisualC++ 2010|1600|0x0A00|0x0A00|
|VisualC++ 2012|1700|0x0B00|0x0B00|
|VisualC++ 2013|1800|0x0C00|0x0C00|
|VisualC++ 2015|1900|0x0D00|0x0D00|
|VisualC++ 2017|1910|0x0E00|0x0E00|

**「nmake.exe」実行環境 [#Version_nmake]
コマンドプロンプトから利用できるようにする方法。
&br;バッチファイル内部で利用する場合は、各バッチファイル(vcvars32.bat/vsvars32.bat)を下記のように呼び出す。
 CALL 〜vsvars32.bat

-VisualC++ 6.0
 cmd.exe /k "%PROGRAMFILES%\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"
-VisualC++ .NET 2002
 cmd.exe /k "%PROGRAMFILES%\Microsoft Visual Studio .NET\Common7\Tools\VSVARS32.BAT"
-VisualC++ .NET 2003
 cmd.exe /k "%VS71COMNTOOLS%\vsvars32.bat"
-VisualC++ 2005
 cmd.exe /k "%VS80COMNTOOLS%\vsvars32.bat"
-VisualC++ 2008
 cmd.exe /k "%VS90COMNTOOLS%\vsvars32.bat"
-VisualC++ 2010
 cmd.exe /k "%VS100COMNTOOLS%\vsvars32.bat"
-VisualC++ 2012
 cmd.exe /k "%VS110COMNTOOLS%\vsvars32.bat"
-VisualC++ 2013
 cmd.exe /k "%VS120COMNTOOLS%\vsvars32.bat"
-VisualC++ 2015
 cmd.exe /k "%VS130COMNTOOLS%\vsvars32.bat"
-VisualC++ 2017

**Windows SDK(旧[[Platform SDK:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/]]) [#Version_PSDK]
:[[Microsoft ダウンロードセンター > Microsoft Platform SDK:http://www.microsoft.com/downloads/results.aspx?freetext=&productID=6F6B7367-A11C-49C3-8CC6-92E74D092146&categoryId=&period=&sortCriteria=date&nr=20&DisplayEnglishAlso=on&DisplayLang=ja]]|

|CENTER:名称|CENTER:Windows Version|CENTER:SDK Version|CENTER:備考|h
|[[Windows® Server 2003 Platform SDK, February 2003:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/downlevel.htm]]|Windows Server 2003|v5.2.3790.0||
|[[Windows XP SP2 SDK, August 2004:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/downlevel.htm]]|Windows XP SP2|||
|[[Windows® Server 2003 SP1 Platform SDK, April 2005:http://www.microsoft.com/downloads/details.aspx?familyid=D8EECD75-1FC4-49E5-BC66-9DA2B03D9B92&displaylang=en]] |Windows Server 2003 SP1|v5.2.3790.1830.15|((VisualStudio.NET 2003でx64なバイナリを作成できるコンパイラを含むのでVisualC++ .NET 2003でx64なプログラム開発する際にも必要。但しVisualStudio 2005のリリース後にはx64サポートは打ち切られる))|
|[[Windows® Server 2003 R2 Platform SDK, March 2006 Edition:http://www.microsoft.com/downloads/details.aspx?FamilyId=E15438AC-60BE-41BD-AA14-7F1E0F19CA0D&displaylang=en]]|Windows Server 2003 R2|v5.2.3790.2075.51||
|[[Microsoft® Windows® Software Development Kit Update for Windows Vista™:http://www.microsoft.com/downloads/details.aspx?familyid=ff6467e6-5bba-4bf5-b562-9199be864d29&displaylang=en]]|Windows Vista|v6.1.6000.16384.10||
|[[Windows Vista™ および .NET Framework 3.0 ランタイム コンポーネント用 Microsoft® Windows® Software Development Kit:http://www.microsoft.com/downloads/details.aspx?FamilyID=7614fe22-8a64-4dfb-aa0c-db53035f40a0&DisplayLang=ja]]|Windows Vista|v6.2.6000.0.18|[[注意事項:http://blogs.msdn.com/dd_jpn/archive/2007/06/04/3073230.aspx]]|
|[[Microsoft® Windows® Software Development Kit(SDK) for Windows Server® 2008 and .NET Framework 3.5:http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&displaylang=en]]|Windows Server 2008|v6.0.6001.18000.367||
|[[Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1:http://www.microsoft.com/downloads/details.aspx?familyid=71DEB800-C591-4F97-A900-BEA146E4FAE1&displaylang=en]]|Windows 7|||
|[[Windows Software Development Kit (SDK) for Windows 8:http://msdn.microsoft.com/en-us/windows/hardware/hh852363]]|Windows 8|||

#br

|CENTER:VisualC++ Version|CENTER:Platform SDK Version|h
|VisualC++ 6.0|Platform SDK February 2003|
|VisualC++ .NET 2002|Platform SDK February 2003|
|VisualC++ .NET 2003|Windows® Server 2003 R2 Platform SDK 2006 March ((プリコンパイル済みヘッダ(StdAfx.h)に「#define WINVER 0x502」を定義しないとSocket周りでビルドエラーが出る。WINVERの定義により_WIN32_WINNT, _WIN32_WINDOWS, _WIN32_IEも適切な値が設定されるので自前で定義しない事))|
|VisualC++ 2005|Windows® Server 2003 R2 Platform SDK 2006 March ((プリコンパイル済みヘッダ(StdAfx.h)に「#define WINVER 0x502」を定義しないとSocket周りでビルドエラーが出る。WINVERの定義により_WIN32_WINNT, _WIN32_WINDOWS, _WIN32_IEも適切な値が設定されるので自前で定義しない事)) (([[Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う:http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/]] 但し、この説明ではPlatformSDKのMFC/ATLを使用するような設定は行っていない))|

-注意事項
:PlatformSDKのアンインストールでVisualStudio .NET 2003でビルド出来なくなる|ビルドを実行すると下記のエラーが出てビルドが実行出来なくなる。
 error PRJ0003 : cl.exe' の起動中にエラーが発生しました。
どうやらPlatformSDKがアンインストール処理の際に、VisualStudioのPlatformSDKの参照設定を削除しに行き、ものの見事に''設定を破壊''してしまう模様。IDEの設定で「$(VCInstallDir)bin」等の設定を見直す事で修復可能。

**[[MSDNライブラリ:http://msdn2.microsoft.com/ja-jp/library]] [#Version_MSDNLib]
:[[Microsoft ダウンロードセンター > MSDN:http://www.microsoft.com/downloads/results.aspx?freetext=&productID=FF4C4E2E-EF15-4706-86E3-B698E6EC0BFF&categoryId=&period=&sortCriteria=date&nr=20&DisplayLang=ja]]|最近はMSDN会員でなくても無償公開されるようになった。

||CENTER:|c
|CENTER:VisualC++ Version|CENTER:MSDN Library Release|h
|VisualC++ 6.0|〜2001年10月号|
|VisualC++ .NET 2002|〜2006年1月号|
|VisualC++ .NET 2003|〜2006年1月号|
|VisualC++ 2005|〜2007年6月号|
|VisualC++ 2008|[[MSDN Library for Visual Studio 2008 SP1(2008年12月更新版):http://www.microsoft.com/downloads/details.aspx?familyid=7BBE5EDA-5062-4EBB-83C7-D3C5FF92A373&displaylang=ja]]|

-Tool
:[[Package This:http://packagethis.codeplex.com]]|Package This is a GUI tool written in C# for creating help files (.chm and .hxs) from the content obtained from the MSDN Library or the TechNet Library via the MSDN Content Service.

**SampleCode [#Version_SampleCode]
:VisualC++ 6.0|
[[Visual Studio 6.0 Samples:http://download.microsoft.com/download/vstudio60pro/Utility/6.0/W98NT42KMeXP/EN-US/vs6samples.exe]] - ちなみに[[こちらは:http://www.microsoft.com/downloads/details.aspx?FamilyID=af0a6060-6566-408f-9f11-ea2c80b8caa0&DisplayLang=en]]リンク切れ。
:VisualC++ .NET 2003|
[[Visual C++ のサンプル アプリケーション:http://msdn.microsoft.com/ja-jp/1370z17c(VS.71).aspx]]
&br;[[Visual C++ .NET 2003 Code Samples:http://www.microsoft.com/downloads/details.aspx?FamilyID=6e6fac4b-5b51-41fe-9604-1d9752e8a71a&DisplayLang=en]] - ManagedC++のサンプル群。
:VisualC++ 2005|
[[Visual C++ のサンプル アプリケーション:http://msdn.microsoft.com/ja-jp/1370z17c(VS.80).aspx]]
:VisualC++ 2008|
[[Visual C++ のサンプル アプリケーション:http://msdn.microsoft.com/ja-jp/1370z17c.aspx]]
&br;[[Microsoft Visual C++ 2008 Sample Library:http://www.microsoft.com/downloads/details.aspx?FamilyId=01AE159F-08CD-495B-8BF4-A48CC395AD7B&displaylang=en]]
&br;[[Microsoft Visual C++ 2008 SP1 Sample Library:http://www.microsoft.com/downloads/details.aspx?FamilyID=9761bb57-f066-4b70-9318-3965c5e68aad&DisplayLang=en]]
:VisualC++ 2010|[[Visual C++ Samples and Related Documentation for Visual Studio 2010:http://code.msdn.microsoft.com/vcsamples/]]


**Runtime [#Version_Runtime]

-VisualC++ 6.0

-VisualC++ .NET 2002

-VisualC++ .NET 2003

-VisualC++ 2005 - [[How to detect the presence of the VC 8.0 runtime redistributable package:http://blogs.msdn.com/astebner/archive/2007/01/16/mailbag-how-to-detect-the-presence-of-the-vc-8-0-runtime-redistributable-package.aspx]]
:RTM|[[for x86:http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=ja]], [[for x64:http://www.microsoft.com/downloads/details.aspx?FamilyID=90548130-4468-4bbc-9673-d6acabd5d13b&DisplayLang=ja]]
:SP1|[[for x86:http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=ja]], [[for x64:http://www.microsoft.com/downloads/details.aspx?FamilyID=eb4ebe2d-33c0-4a47-9dd4-b9a6d7bd44da&DisplayLang=ja]]
:[[SP1 with MFC Fix:http://support.microsoft.com/kb/961894]]|[[for x86:http://code.msdn.microsoft.com/KB961894/Release/ProjectReleases.aspx?ReleaseId=2067]], [[for x64:http://code.msdn.microsoft.com/KB961894/Release/ProjectReleases.aspx?ReleaseId=2067]]
:[[SP1 with ATL Fix:http://support.microsoft.com/kb/973544]]|[[for x86, for x64:http://www.microsoft.com/downloads/details.aspx?FamilyID=766A6AF7-EC73-40FF-B072-9112BAB119C2&displaylang=ja]]

-VisualC++ 2008 - [[How to detect the presence of the Visual C++ 9.0 runtime redistributable package:http://blogs.msdn.com/astebner/archive/2009/01/29/9384143.aspx]]
:RTM|[[for x86:http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=ja]], [[for x64:http://www.microsoft.com/downloads/details.aspx?FamilyID=bd2a6171-e2d6-4230-b809-9a8d7548c1b6&DisplayLang=ja]]
:RTM with Feature Pack|[[for x86:http://www.microsoft.com/downloads/details.aspx?FamilyID=d5692ce4-adad-4000-abfe-64628a267ef0&DisplayLang=en]], [[for x64:http://www.microsoft.com/downloads/details.aspx?FamilyID=7b50fddf-4798-4fce-8a8b-a8dfe556c8e4&DisplayLang=en]]
:SP1|[[for x86:http://www.microsoft.com/downloads/details.aspx?FamilyID=a5c84275-3b97-4ab7-a40d-3802b2af5fc2&DisplayLang=ja]], [[for x64:http://www.microsoft.com/downloads/details.aspx?FamilyID=ba9257ca-337f-4b40-8c14-157cfdffee4e&DisplayLang=ja]]
:SP1 with MFC Fix|[[for x86, for x64:http://code.msdn.microsoft.com/KB972685]]
:SP1 with ATL Fix|[[for x86, for x64:http://www.microsoft.com/downloads/details.aspx?FamilyID=2051A0C1-C9B5-4B0A-A8F5-770A549FD78C&displaylang=ja]]

-VisualC++ 2010 - [[How to detect the presence of the Visual C++ 2010 redistributable package:http://blogs.msdn.com/astebner/archive/2010/05/05/10008146.aspx]]
:RTM|[[for x86:http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84]], [[for x64:http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=bd512d9e-43c8-4655-81bf-9350143d5867]]
:SP1|[[for x86:http://www.microsoft.com/downloads/ja-jp/details.aspx?familyid=c32f406a-f8fc-4164-b6eb-5328b8578f03]], [[for x64:http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=C68CCBB6-75EF-4C9D-A326-879EAB4FCDF8]]

-VisualC++ 2012

-VisualC++ 2013

-VisualC++ 2015

-VisualC++ 2017

*参考情報 [#Information]
:[[MSDN Code Gallery:http://code.msdn.microsoft.com]]|[[VisualC++:http://code.msdn.microsoft.com/Project/ProjectDirectory.aspx?TagName=Visual%20C%2b%2b]] - VC++2005/2008向けのHotfixはこちらから入手
:[[MSDN Patterns & Practices > UNIX Application Migration Guide:http://msdn2.microsoft.com/ja-jp/ms811897.aspx]]|UNIXなプログラムをWindowsに移植する際の参考情報。
:[[NyaRuRuの日記 > Visual C++ 2005 への移行と生成コードの速度低下:http://d.hatena.ne.jp/NyaRuRu/20060227/p1]]|「Visual C++ 6.0/ .NET 2003 から Visual C++ 2005 に移行したら生成されたプログラムのパフォーマンスが悪化した」という話はまあありがちといえばありがちかもしれません.少なくともあって不思議ではない話です.

*API(Application Program Interface) [#API]
しっかりリファレンスに目を通してありがちなバグを減らしましょう。

:[[MSDNライブラリ:http://msdn2.microsoft.com/ja-jp/library]]|
:[[Visual C++ のライブラリ:http://msdn.microsoft.com/ja-jp/ms400529.aspx]]|
:[[[SDK32] C ランタイム関数の Win32 で対応する関数一覧:http://support.microsoft.com/kb/99456]]|C ランタイム関数は Win32 アプリケーション プログラミング インターフェイス (API) に直接対応する関数を数多く持っています。この記事ではカテゴリ別に C ランタイム関数をリストアップし、Win32 で対応する関数が存在する場合は等価関数名を、同等の物が存在しない場合には "なし" を表記します。
:[[MSDN Library > Platform SDK > Windows API Functions by Release:http://msdn2.microsoft.com/ja-jp/aa383687.aspx]]|各OSで追加/変更されたAPIの一覧表。

-ランタイムライブラリ
:[[カテゴリ別ランタイム ルーチン:http://msdn.microsoft.com/ja-jp/2aza74he.aspx]]|
:[[汎用テキスト マップ(TCHAR.H):http://msdn.microsoft.com/ja-jp/szdfzttz.aspx]]|

-MFC
:[[MFC マクロとグローバル:http://msdn.microsoft.com/ja-jp/f2dch7fb.aspx]]|
:[[MFC クラス:http://msdn.microsoft.com/ja-jp/bk77x1wx.aspx]]|
:[[MFC 階層図:http://www.microsoft.com/downloads/details.aspx?FamilyID=294eb161-6855-4abd-99b4-325c66a78377&DisplayLang=ja]]|これらの図では、MFC 内のクラスの関係が示されています。Visual Studio 2008 でリリースされた元のクラスだけでなく、Visual C++ 2008 Feature Pack で提供された追加のクラスも含まれます。

-ATL
:[[ATL 関数リファレンス (アルファベット順):http://msdn.microsoft.com/ja-jp/0zxk65xx.aspx]]|
:[[ATLのクラス:http://msdn.microsoft.com/ja-jp/awt7k7f5.aspx]]|

-COM
:[[Compiler COM Global Functions:http://msdn.microsoft.com/ja-jp/kt23d78z.aspx]]|

-WinSock
:[[MSDN > Platform SDK > Windows Sockets 2 > Winsock Reference:http://msdn2.microsoft.com/ja-jp/ms741416.aspx]]|

**Timer [#API_Timer]
|CENTER:API名称|CENTER:用途|h
|Sleep|指定された時間に渡って現在のスレッドの実行を中断|
|SleepEx|Sleep()の割り込み有り版|
|GetTickCount|システムを起動した後の経過時間をミリ秒[ms]単位で取得|
|timeGetDevCaps|タイマデバイスを照会して分解能を取得|
|timeGetTime|システム時刻をミリ秒単位で取得|
|timeGetSystemTime|システム時刻をミリ秒単位で取得|
|timeBeginPeriod|アプリケーションまたはデバイスドライバの最小タイマ分解能を設定|
|timeEndPeriod|以前にセットされた最小タイマ分解能をクリア|
|timeSetEvent|指定されたタイマイベントを開始|
|timeKillEvent|指定されたタイマイベントを終了|
|QueryPerformanceFrequency|高分解能パフォーマンスカウンタの周波数(更新頻度)を取得|
|QueryPerformanceCounter|高分解能パフォーマンスカウンタの現在値を取得|
|SetTimer|指定されたタイムアウト値を持つ 1 個のタイマを作成|
|KillTimer|指定されたタイマを破棄|
|CreateTimerQueue|タイマのキューを作成|
|DeleteTimerQueueEx|タイマキューを削除|
|CreateTimerQueueTimer|タイマキュータイマを作成|
|DeleteTimerQueueTimer|タイマキュータイマを取り消します|
|CreateWaitableTimer|“待機可能”タイマオブジェクトを作成|
|SetWaitableTimer|指定した“待機可能”タイマをアクティブにします|
|CancelWaitableTimer|指定した“待機可能”タイマをアクティブでない状態に設定|

-参考情報
:[[Microsoft > Guidelines For Providing Multimedia Timer Support:http://www.microsoft.com/whdc/system/sysinternals/mm-timer.mspx]]|
:[[Intel > Measure Code Sections Using The Enhanced Timer:http://softwarecommunity.intel.com/articles/eng/2589.htm]]|
:[[Windows Multimedia Hacks > 楽しいハック講座(3) マルチメディア タイマー その2:http://blogs.msdn.com/windows_multimedia_jp/archive/2009/10/12/3-2.aspx]]|

**プロセス・スレッド制御 [#API_Process]
|CENTER:API名称|CENTER:用途|h
|EnumProcess|システム内の各プロセスオブジェクト用のプロセス識別子を取得|
|EnumProcessModules|指定されたプロセス内の各モジュールのハンドルを取得|
|GetModuleBaseName|指定されたモジュールのベース名を取得|
|[[SwitchToThread:http://msdn.microsoft.com/ja-jp/cc429368.aspx]]|呼び出し側スレッドから現在のプロセッサで実行する準備ができている別のスレッドに実行を譲渡|
|GetCurrentProcess|現在のプロセスの疑似ハンドルを取得|
|GetCurrentProcessId|呼び出し側プロセスのプロセス識別子を取得|
|GetProcessAffinityMask&br;SetProcessAffinityMask|指定されたプロセスのプロセスアフィニティマスクとシステムのシステムアフィニティマスクを取得・設定|
|GetPriorityClass&br;SetPriorityClass|指定されたプロセスの優先順位クラスを取得・設定|
|GetProcessPriorityBoost|指定されたプロセスのプライオリティブースト制御の状態を取得|
|SetProcessPriorityBoost|指定されたプロセスに属するスレッドの優先順位を一時的に上げる Windows NT のブースト機能を設定|
|GetCurrentThread|現在のスレッドの擬似ハンドルを取得|
|GetCurrentThreadId|呼び出し側スレッドのスレッド識別子を取得|
|GetWindowThreadProcessId|指定されたウィンドウを作成したプロセス及びスレッドのIDを取得|
|EnumThreadWindows|指定されたスレッドに関連付けられている、子ウィンドウでない全てのウィンドウを列挙|
|SetThreadAffinityMask|指定されたスレッドのプロセッサアフィニティマスクを設定|
|SetThreadIdealProcessor|スレッドの優先プロセッサを指定|
|GetThreadPriority&br;SetThreadPriority|指定されたスレッドの相対優先順位値を取得・設定|
|GetThreadPriorityBoost|指定されたスレッドのプライオリティブースト制御の状態を取得|
|SetThreadPriorityBoost|スレッドの優先順位を一時的に上げる Windows NT の機能を設定|
|AttachThreadInput|特定のスレッドの入力処理機構を別のスレッドにアタッチ|
|FindExecutable|指定されたファイル名に関連付けられている実行可能(.EXE)ファイルの名前とハンドルを取得|
|AssocQueryString|レジストリからファイル又はプロトコルの関連付け設定値を検索・取得|
|[[SetThreadExecutionState:http://msdn.microsoft.com/en-us/cc429178.aspx]]|アプリケーションが実行されていることをシステムに通知し、アプリケーションの実行中にシステムが電源のスリープ状態に入るのを防ぐ|
|GetProcessTimes|指定されたプロセスに関する時間情報を取得|
|GetThreadTimes|指定されたスレッドに関する時間情報を取得|
|CreateToolhelp32Snapshot|プロセスと、プロセスが使っているヒープ、モジュール、スレッドのスナップショットを作成|
|Process32First|システムのスナップショット内で見つかった最初のプロセスに関する情報を取得|
|Process32Next|システムのスナップショット内に記録されている次のプロセスに関する情報を取得|
|Thread32First|システムのスナップショット内で見つかった任意のプロセス内の、最初のスレッドに関する情報を取得|
|Thread32Next|システムのスナップショット内で見つかった任意のプロセス内の、次のスレッドに関する情報を取得|

#br
CENTER:''プロセス/スレッド起動''
|CENTER:CRT(ANSI)|CENTER:Win32|CENTER:Win32(Shell)|CENTER:MFC|CENTER:ATL|h
|_spawnl&br;_spawnle&br;_spawnlp&br;_spawnlpe&br;_spawnv&br;_spawnve&br;_spawnvp&br;_spawnvpe|CreateProcess&br;CreateProcessAsUser|ShellExecute&br;ShellExecuteEx|-|-|
|_beginthread&br;_beginthreadex|CreateThread ((CreateThread()で作成したスレッドでCRT関数を呼び出すとMemoryLeakする。[[http://support.microsoft.com/kb/104641]]))&br;CreateRemoteThread|SHCreateThread&br;[[SHCreateThreadWithHandle:http://msdn.microsoft.com/ja-jp/cc351035.aspx]]|AfxBeginThread|AtlCreateThread|
|-|GetCommandLine|-|-|-|
|-|CommandLineToArgvW|-|-|-|
//|||-|-|-|

#br
-参考情報
:[[Windows98/2000以降でWindowをアクティブにする:http://www.woodensoldier.info/computer/bcbtips/9.htm]]|SetForegroundWindowだけでは駄目で、AttachThreadInputも使う必要があるらしい。
:[[方法 : ネイティブ コードのスレッド名を設定する:http://msdn.microsoft.com/ja-jp/library/xcb2z8hs.aspx]]|

**同期オブジェクト [#API_Synchronize]
|CENTER:API名称|CENTER:用途|h
|WaitForSingleObject|指定されたオブジェクトがシグナル状態になるかタイムアウトすると制御を返す|
|WaitForMultipleObjects|指定されたオブジェクトの1つ又は全てがシグナル状態になるかタイムアウトすると制御を返す|
|CreateMutex|名前付きまたは名前なしのミューテックスオブジェクトを作成または開く|
|OpenMutex|既存の名前付きミューテックスオブジェクトを開く|
|ReleaseMutex|指定されたミューテックスオブジェクトの所有権を解放|
|CreateSemaphore|名前付きまたは名前なしのセマフォオブジェクトを作成または開く|
|OpenSemaphore|既存の名前付きセマフォオブジェクトを開く|
|ReleaseSemaphore|指定されたセマフォオブジェクトのカウントを、指定された数だけ増やす|
|InitializeCriticalSection|指定されたクリティカルセクションオブジェクトを初期化|
|DeleteCriticalSection|所有されていないクリティカルセクションオブジェクトが使っている全てのリソースを解放|
|EnterCriticalSection|指定されたクリティカルセクションオブジェクトの所有権を取得するまで待機|
|TryEnterCriticalSection|クリティカルセクションへのエントリをブロックせずに試みる|
|LeaveCriticalSection|指定されたクリティカルセクションオブジェクトの所有権を解放|
|LockFile|開いているファイル内の指定された領域をロック|
|LockFileEx|開いているファイル内の指定された領域に対して、共有アクセスまたは排他アクセスを行うためのロックを行う|
|UnlockFile|開いているファイル内の指定された領域をロック解除します|
|UnlockFileEx|開いているファイル内の、既にロックされたバイト範囲をロック解除します|

-参考情報
:[[@IT > 第3回 マルチタスクに不可欠な同期の仕組みを学ぶ:http://itpro.nikkeibp.co.jp/article/COLUMN/20070603/273403/]]|CriticalSection/Mutex/Semaphoreの特徴や、SetEvent/PulseEventの自動/手動イベントの動作の違い等。
:[[MSDN > 短時間でできる汎用の同期オブジェクト:http://msdn.microsoft.com/ja-jp/cc429052.aspx]]([[A Quick and Versatile Synchronization Object:http://msdn.microsoft.com/en-us/ms810428.aspx]])|1998年の記事なのでちょっと古い。日本語訳の方は原文のAppendixが抜けているので注意。
&br;既存のWin32APIを組み合わせてMeteredSectionを扱う同期オブジェクトを作成する内容。
:[[PulseEvent関数:http://msdn.microsoft.com/en-us/ms684914.aspx]]|This function is unreliable and should not be used. It exists mainly for backward compatibility.
:[[MSDNマガジン > 同時実行:Windows Vista の新しい同期プリミティブ:http://msdn.microsoft.com/ja-jp/magazine/cc163405.aspx]]|この記事では、ネイティブ C/C++ 開発者にが利用すべき Windows Vista のいくつかの新機能について説明します。具体的には、条件変数、slim reader/writer ロック、one-time initialization など、Windows Vista で導入された新しいスレッド同期機能を取り上げます。

**ウィンドウ操作 [#API_Window]
|CENTER:Win32|CENTER:Win32(Shell)|CENTER:MFC|h
|MessageBox|ShellMessageBox|AfxMessageBox|

#br

|CENTER:API名称|CENTER:用途|h
|ShowWindow|指定されたウィンドウの表示状態を設定|
|ShowWindowAsync|別のスレッドによって作成されたウィンドウの表示状態を設定|
|BringWindowToTop|指定されたウィンドウを Z オーダーの先頭にする|
|[[SwitchToThisWindow:http://msdn.microsoft.com/ja-jp/ms633553.aspx]]|switch focus to a specified window and bring it to the foreground.|
|[[SHAutoComplete:http://msdn.microsoft.com/ja-jp/bb759862.aspx]]|オートコンプリート機能を有効にする|
|[[IsHungAppWindow:http://msdn.microsoft.com/ja-jp/ms633526.aspx]]|ハングアップしたアプリケーション判定|
|[[DisableProcessWindowsGhosting:http://msdn.microsoft.com/ja-jp/ms648415.aspx]]|Ghostウィンドウの生成を抑止|
|[[SetLayeredWindowAttributes:http://msdn.microsoft.com/ja-jp/cc411043.aspx]]|レイヤードウィンドウの不透明度と透明のカラーキーを設定|

**メッセージ操作 [#API_Message]
|CENTER:Win32|CENTER:Win32(Shell)|CENTER:MFC|h
|SendMessage|-|-|
|SendMessageTimeout|-|-|
|SendMessageCallBack|-|-|
|SendNotifyMessage|-|-|
|PostMessage|-|-|
|PostThreadMessage|-|-|
|PostAppMessage|-|-|
|PostQuitMessage|-|AfxPostQuitMessage|
|RegisterWindowMessage|-|-|
//|||-|

**共有メモリ [#API_SharedMemory]
|CENTER:API名称|CENTER:用途|h
|CreateFileMapping|ファイルマッピングオブジェクトの作成/オープン|
|MapViewOfFile|ファイルのビューをマップする|
|FlushViewOfFile|マップトファイルのビュー内にある、指定された範囲のデータをディスクに書き込む|
|UnmapViewOfFile|ファイルのビューをアンマップする|
|CloseHandle|ファイルマッピングオブジェクトのハンドル破棄|

**メモリ操作 [#API_Memory]
|CENTER:CRT(ANSI)|CENTER:Win32|CENTER:Win32(Shell)|CENTER:COM/OLE|h
|malloc&br;calloc|GlobalAlloc&br;HeapAlloc&br;LocalAlloc&br;VirtualAlloc&br;VirtualAllocEx|SHGetMalloc&br;SHAlloc ((VisualC++ .NET 2003以降))|CoTaskMemAlloc&br;CoGetMalloc|
|realloc&br;_expand|GlobalReAlloc&br;HeapReAlloc&br;LocalReAlloc|-|CoTaskMemRealloc|
|free|GlobalFree&br;HeapFree&br;LocalFree&br;VirtualFree&br;VirtualFreeEx|SHFree ((VisualC++ .NET 2003以降))|CoTaskMemFree|
|_msize|GlobalSize&br;HeapSize&br;LocalSize|-|-|
|_alloca|-|-|-|
|memcpy|CopyMemory|-|-|
|_memccpy|-|-|-|
|memset|FillMemory&br;ZeroMemory&br;SecureZeroMemory((Platform SDK February 2003やVisualC++ .NET 2003以降))|-|-|
|memmove|MoveMemory|-|-|
|memcmp|RtlCompareMemory&br;RtlEqualMemory|-|-|
|memchr|-|-|-|
|-|ReadProcessMemory|-|-|
|-|WriteProcessMemory|-|-|
|-|GlobalMemoryStatus&br;GlobalMemoryStatusEx|-|-|
//|||-|-|

**環境変数操作 [#API_Envirionment]
|CENTER:CRT(ANSI)|CENTER:Win32|CENTER:Win32(Shell)|h
|getenv|GetEnvironmentVariable|-|
|_putenv|SetEnvironmentVariable ((SetEnvironmentVariable()で設定したものはgetenv()で取得不可、逆に_putenv()したものはGetEnvironmentVariable()でも取得可能))|-|
|-|ExpandEnvironmentStrings ((SetEnvironmentVariable()で設定した値も取得可能))|PathUnExpandEnvStrings|
|-|-|[[DoEnvironmentSubst:http://msdn.microsoft.com/ja-jp/bb776405.aspx]]|
|-|[[SetDllDirectory:http://msdn2.microsoft.com/ja-jp/ms686203.aspx]]|-|
//|||-|

**文字列操作 [#API_String]
文字列操作関連はバッファサイズ指定ありのもの(N文字付き)を使うようにするべきだが、どのAPI(CRT/Win32/Shell/・・・)の実行速度が一番速いのだろう・・・。

||||||CENTER:|c
|CENTER:CRT(ANSI)|CENTER:Win32|CENTER:Win32(Shell)|CENTER:[[Platform SDK&br;DirectX9 SDK&br;(strsafe.h):http://msdn2.microsoft.com/ja-jp/ms647466.aspx]]|CENTER:COM/OLE|単&br;位&br;((A : char/wchar_t単位, B : byte単位))|h
|strcpy|lstrcpy|StrCpy|-|-|-|
|strncpy|lstrcpyn|StrCpyN&br;StrNCpy|StringCchCopy|-|A|
|-|-|-|StringCbCopy|-|B|
|strlen&br;_mbstrlen&br;_mbsnccnt|lstrlen|-|StringCchLength|SysStringLen|A|
|_mbsnbcnt|-|-|StringCbLength|-|B|
|mblen|-|-|-|-|B|
|strcmp&br;strcoll|lstrcmp|StrCmp&br;StrCmpC|-|-|A|
|strcmpi&br;stricoll|lstrcmpi|StrCmpI&br;[[StrCmpLogicalW:http://msdn.microsoft.com/ja-jp/bb759947.aspx]]&br;StrCmpCI|-|-|A|
|strcat|lstrcat|StrCat|-|-|-|
|strncat|-|StrCatN&br;StrNCat&br;StrCatBuff|StringCchCat&br;StringCchCatEx&br;StringCchCatN|-|A|
|-|-|-|StringCbCat&br;StringCbCatEx&br;StringCbCatN|-|B|
|strncmp&br;_strncoll|CompareString&br;[[CompareStringEx:http://msdn.microsoft.com/ja-jp/cc709429.aspx]]|StrCmpN&br;StrCmpNC|-|-|A|
|_strnicmp&br;_strnicoll|CompareString&br;[[CompareStringEx:http://msdn.microsoft.com/ja-jp/cc709429.aspx]]|StrCmpNI&br;StrCmpNIC|-|-|A|
|-|CompareStringOrdinal ((WindowsVista以降))|-|-|-|A|
|_strdup|-|StrDup&br;SHStrDup|-|SysAllocString&br;SysAllocStringLen&br;SysAllocStringByteLen|-|
|-|-|-|-|SysFreeString|-|
|strchr|-|StrChr&br;StrChrI|-|-|-|
|strrchr|-|StrRChr&br;StrRChrI|-|-|-|
|strstr|-|StrStr&br;StrStrI|-|-|-|
|-|-|StrRStrI|-|-|-|
|strspn|-|-|-|-|-|
|strcspn|-|-|-|-|-|
|_strspnp|-|-|-|-|-|
|_strset|-|-|-|-|-|
|_strnset|-|-|-|-|-|
|_strrev|-|-|-|-|-|
|-|-|StrTrim|-|-|-|
|_strnextc&br;_strinc&br;_strninc|CharNext&br;CharNextExA|-|-|-|-|
|_strdec|CharPrev&br;CharPrevExA|-|-|-|-|
|_toupper&br;_strupr|CharUpper&br;CharUpperBuff|-|-|-|-|
|_tolower&br;_strlwr|CharLower&br;CharLowerBuff|-|-|-|-|
|-|GetStringTypeEx|-|-|-|-|
|isleadbyte|IsDBCSLeadByte&br;IsDBCSLeadByteEx|-|-|-|-|
|_ismbslead&br;_ismbblead|-|-|-|-|-|
|isupper|IsCharUpper|-|-|-|-|
|islower|IsCharLower|PathMakePretty|-|-|-|
|isalpha|IsCharAlpha|-|-|-|-|
|isalnum|IsCharAlphaNumeric|-|-|-|-|
|isspace|-|IsCharSpace ((WinXP SP2以降))|-|-|-|
|-|IsTextUnicode|-|-|-|-|
//|||-|-|-|-|

#br
CENTER:''書式設定''
||||||CENTER:|c
|CENTER:CRT(ANSI)|CENTER:Win32|CENTER:Win32(Shell)|CENTER:[[Platform SDK&br;DirectX9 SDK&br;(strsafe.h):http://msdn2.microsoft.com/ja-jp/ms647466.aspx]]|単&br;位&br;((A : char/wchar_t単位, B : byte単位))|h
|sprintf|wsprintf ((浮動小数点値の出力「%f」に未対応なので注意))|-|-|-|
|_snprintf|-|wnsprintf ((浮動小数点値の出力「%f」に未対応なので注意))|StringCchPrintf|A|
|-|-|-|StringCbPrintf|B|
|vsprintf|wvsprintf ((浮動小数点値の出力「%f」に未対応なので注意))|-|-|-|
|_vsnprintf|-|wvnsprintf ((浮動小数点値の出力「%f」に未対応なので注意))|StringCchVPrintf|A|
|-|-|-|StringCbVPrintf|B|
|[[_scprintf:http://msdn.microsoft.com/ja-jp/t32cf9tb.aspx]]|-|-|-|-|
|setprecision ((VC++6.0以下はiomanip.h、VC++6.0以降はiomanipに定義あり。))|-|-|-|-|
//|||-|-|-|

#br
CENTER:''数値変換''
||||||CENTER:|c
|CENTER:CRT(ANSI)|CENTER:Win32|CENTER:Win32(Shell)|CENTER:備考|h
|atoi|-|StrToInt&br;StrToIntEx|int|
|atol|-|StrToLong|long|
|strtol|-|-|long|
|strtoul|-|-|unsigned long|
|_atoi64|-|StrToInt64Ex|_int64|
|_strtoi64 ((VisualC++ .NET 2002以降))|-|-|_int64|
|_strtoui64 ((VisualC++ .NET 2002以降))|-|-|unsigned _int64|
|atof|-|-|double|
|strtod|-|-|double|
|_itoa|-|-|int|
|_ltoa|-|-|long|
|_ultoa|-|-|unsigned long|
|_i64toa|-|-|_int64|
|_ui64toa|-|-|unsigned _int64|
|_ecvt|-|-|double|
|_fcvt|-|-|double|
|_gcvt|-|-|double|
//||-|-||

#br
CENTER:''文字コード/データ型変換''((利用時はsetlocale等でロケール設定を忘れずに))
|CENTER:CRT(ANSI)|CENTER:Win32|CENTER:ATL|CENTER:COM/OLE|CENTER:[[MLang:http://msdn2.microsoft.com/ja-jp/Aa741108.aspx]] ((*.libファイルは提供されないので、LoadLibrary()して利用する。))|h
|mbtowc|-|-|-|-|
|wctomb|-|-|-|-|
|mbstowcs|MultiByteToWideChar&br;FoldString|_mbstowcsz|ConvertStringToBSTR|ConvertINetMultiByteToUnicode|
|wcstombs|WideCharToMultiByte&br;((WideCharToMultiByte()の戻り値は、wcstombs()とは異なりNull文字分も含めた値が返る))|_wcstombsz|ConvertBSTRToString|ConvertINetUnicodeToMultiByte|
|-|LCMapString|-|-|ConvertINetString|
|_mbcjistojms|-|-|-|-|
|_mbcjmstojis|-|-|-|-|
|_mbctombb|-|-|-|-|
|_mbbtombc|-|-|-|-|
|_mbctohira|-|-|-|-|
|_mbctokata|-|-|-|-|
|-|-|AtlUnicodeToUTF8|-|-|
//|-|-|-|-|-|-|

#br
CENTER:''汎用テキスト ルーチン マッピング''
|CENTER:ANSI|CENTER:_UNICODE|CENTER:_MBCS|CENTER:TCHAR.H|h
|strlen|wcslen|_mbslen|_tcslen|
|strcpy|wcscpy|_mbscpy|_tcscpy|
|strncpy|wcsncpy|_mbsncpy|_tcsncpy|
|sprintf|swprintf|sprintf|_stprintf|
|_snprintf|_snwprintf|_snprintf|_sntprintf|
|printf|wprintf|printf|_tprintf|
|fprintf|fwprintf|fprintf|_ftprintf|
|fopen|_wfopn|fopen|_tfopen|
|fgetc|fgetwc|fgetc|_fgettc|
|atoi|wtoi|atoi|_ttoi|
|strtol|wcstol|strtol|_tcstol|
|strtod|wcstod|strtod|_tcstod|
//|||||

#br
-MACRO定義
:[[MSDN > MFC の MBCS/Unicode 変換マクロの使用:http://msdn.microsoft.com/ja-jp/805c56f8.aspx]]|ここでは、AFXPRIV.H 中で定義されている MBCS/Unicode 変換用マクロの使用方法を説明します。これらのマクロは、OLE API を直接扱うようなアプリケーションや、なんらかの理由で Unicode と MBCS 間で変換を行う必要がある場合に便利です。
:[[MSDN > ATL と MFC の文字列変換マクロ:http://msdn.microsoft.com/ja-jp/87zae4a3.aspx]]|ATL 7.0 には、いくつかの新しい変換クラスと変換マクロが用意されており、既存のマクロよりも機能が大幅に向上しています。

-注意事項
:文字サイズの指定|下記のように宣言した場合、
 wchar_t wcBuff[ 64 ];
サイズは下記のように指定する。
&br;「char/wchar_t単位」・・・「64」or「sizeof( wcBuff ) / sizeof( wchar_t )」
&br;「byte単位」・・・「sizeof( wcBuff )」

-関連情報
:[[MSDN > さまざまな文字列型間で変換する:http://msdn.microsoft.com/ja-jp/ms235631.aspx]]|C++/CLI向けのサンプルだけど、.NET周りを除外すればNativeC++でも再利用可能なサンプルコード。
:[[大西彰のウェブログ > Visual Studio 6.0のユーザの為の「Unicodeアプリケーションネタの整理」:http://sqljp.com/akiraonishi/archive/2005/07/30/12621.aspx]]|最近のDXUTはUnicodeで作らねばいかんのです。
:[[Unicodeバグについて:http://rocketeer.dip.jp/secProg/index.htm]]|本文書は、このようなセキュリティ上の問題が存在する事を衆知徹底させる事を目的とする。
:[[葉っぱ日記 > WindowsとUnicode:http://d.hatena.ne.jp/hasegawayosuke/searchdiary?word=%2a%5bWindows%a4%c8Unicode%5d]]|Windows 上で Unicode を扱う場合に発生するセキュリティ上の問題点などについて不定期に書いていくことにします。
:[[葉っぱ日記 > Unicodeとセキュリティ:http://d.hatena.ne.jp/hasegawayosuke/searchdiary?word=%2a%5bUnicode%a4%c8%a5%bb%a5%ad%a5%e5%a5%ea%a5%c6%a5%a3%5d]]|

**パス操作 [#API_Path]
|CENTER:CRT(ANSI)|CENTER:Win32|CENTER:Win32(Shell)|CENTER:MFC|h
|_makepath|-|PathCombine|-|
|_fullpath|GetFullPathName&br;GetLongPathName|PathCanonicalize ((PathCanonicalize()はディレクトリの区切り文字は '\' のみで '/' は認識されない。))&br;PathResolve|AfxFullPath ((#include <../src/mfc/afximpl.h>))|
|-|GetShortPathName|-|-|
|-|-|PathRelativePathTo|-|
|_splitpath|GetFileTitle|PathGetDriveNumber&br;PathFindFileName&br;PathFindExtension&br;PathStripToRoot&br;PathStripPath|-|
|-|GetModuleFileName&br;GetModuleFileNameEx|-|-|
|-|GetModuleBaseName|-|-|
|-|-|PathRemoveBlanks|-|
|-|-|PathRemoveFileSpec|-|
|-|-|PathRenameExtension|-|
|-|-|PathUnExpandEnvStrings|-|
|-|-|PathCompactPathEx|-|
|-|-|PathCommonPrefix|-|
|-|-|PathUnquoteSpaces|-|
||-|PathGetCharType|-|

:[[Shell Path Handling関数:http://msdn.microsoft.com/ja-jp/library/bb773559.aspx]]|

**フォルダ操作 [#API_Folder]
|CENTER:CRT(ANSI)|CENTER:Win32|CENTER:Win32(Shell)|h
|_mkdir|CreateDirectory&br;CreateDirectoryEx&br;MakeSureDirectoryPathExists ((MakeSureDirectoryPathExists() で「C:¥A¥B¥C」というフォルダを作成したい場合、引数には「C:¥A¥B¥C¥」と指定する必要がある。「C:¥A¥B¥C」とした場合「C:¥A¥B」までしか作成されないので注意。))|SHCreateDirectory&br;SHCreateDirectoryEx|
|_rmdir|RemoveDirectory|-|
|_getcwd&br;_getdcwd|GetCurrentDirectory|-|
|_chdir|SetCurrentDirectory|-|
|-|GetWindowsDirectory&br;GetSystemWindowsDirectory|SHGetFolderPath&br;SHGetSpecialFolderPath|
|-|GetSystemDirectory|SHGetFolderPath&br;SHGetSpecialFolderPath|
//||-||

**ファイル操作 [#API_File]
|CENTER:CRT(ANSI)|CENTER:Win32|CENTER:Win32(Shell)|h
|_searchenv|SearchPath&br;SearchTreeForFile|-|
|_findfirst|FindFirstFile&br;FindFirstFileEx|-|
|_findnext|FindNextFile|-|
|_findclose|FindClose|-|
|-|FindFirstChangeNotification|-|
|-|FindNextChangeNotification|-|
|-|FindCloseChangeNotification|-|
|-|ReadDirectoryChangesW|-|
|-|CopyFile&br;CopyFileEx|SHFileOperation|
|rename|MoveFile&br;MoveFileEx&br;MoveFileWithProgress|SHFileOperation|
|-|[[ReplaceFile:http://msdn.microsoft.com/ja-jp/cc429690.aspx]]|-|
|remove&br;_unlink|DeleteFile|SHFileOperation&br;Win32DeleteFile|
|_access|-|PathFileExists|
|_stat, _stati64|GetFileAttributes&br;GetFileAttributesEx|-|
|_fstat, _fstati64|GetFileType&br;GetFileTime|-|
|-|[[GetFileInformationByHandle:http://msdn.microsoft.com/ja-jp/cc429317.aspx]]|-|
|_locking|LockFile&br;UnlockFile|-|
|-|GetPrivateProfileInt|-|
|-|GetPrivateProfileString|-|
|-|WritePrivateProfileString|-|
|tmpnam, _tmpnam, _mktemp|GetTempFileName|-|
|_futime, _futime64|GetFileTime|-|
|_utime, _utime64|SetFileTime&br;TouchFileTimes|-|
|-|GetFileVersionInfoSize|-|
|-|GetFileVersionInfo|-|
//|||-|

#br
CENTER:''Open/Close/Seek''
|CENTER:SystemCall|CENTER:stdio((API名に「_nolock」を付けるとスレッドのロックを行わないバージョンになる))|CENTER:Win32|h
|_creat||CreateFile|
|_open|fopen|CreateFile|
|_sopen|_fsopen|CreateFile|
||freopen||
|_close|fclose, _fcloseall|CloseHandle|
|_fileno|_fdopen||
|_eof|feof||
|_read|fread|ReadFile, ReadFileEx|
|_write|fwrite|WriteFile, WriteFileEx|
|_commit|fflush, _flushall|FlushFileBuffers|
|_lseek, _lseeki64|fseek, _fseeki64, rewind|SetFilePointer, SetFilePointerEx|
||fsetpos||
|_tell, _telli64|ftell, _ftelli64||
||fgetpos||
|_filelength, _filelengthi64|((fseekで終端に移動し、ftellで位置取得により代用))|GetFileSize, GetFileSizeEx|
|_chsize||SetEndOfFile|
|__lock_fhandle|_lock_file|LockFile, LockFileEx|
|_unlock_fhandle|_unlock_file|UnlockFile, UnlockFileEx|
//||||

**日時 [#API_DayTime]
|CENTER:CRT(ANSI) ((「_XXXX64()」となっているAPIは、VC++ .NET 2002以降で利用可能。これらは2039年問題対策用のAPIであると思われる。))|CENTER:Win32|CENTER:Win32(Shell)|CENTER:COM/OLE|h
|time, _time64|GetSystemTime||CoFileTimeNow|
||GetSystemTimeAsFileTime|||
|_ftime, _ftime64||||
||GetLocalTime|||
|localtime, _localtime64|SystemTimeToTzSpecificLocalTime|||
||TzSpecificLocalTimeToSystemTime|||
|gmtime||||
|mktime||||
|ctime||[[SHFormatDateTime:http://msdn.microsoft.com/ja-jp/bb773833.aspx]]||
|asctime||||
|_strtime||||
|difftime, _difftime64||||
||CompareFileTime|||
||FileTimeToDosDateTime||CoFileTimeToDosDateTime|
||DosDateTimeToFileTime||CoDosDateTimeToFileTime|
||FileTimeToSystemTime|||
||SystemTimeToFileTime|||
||FileTimeToLocalFileTime|||
||LocalFileTimeToFileTime|||
||||DosDateTimeToVariantTime|
||||VariantTimeToDosDateTime|
||||SystemTimeToVariantTime|
||||VariantTimeToSystemTime|
//|||||

-関連情報
:[[SystemTimeToTzSpecificLocalTime 関数は、特定の Windows インストールで使用するアプリケーションを実行する場合、アプリケーションのパフォーマンスが非常に低い:http://support.microsoft.com/kb/960417]]|

**GDI(Graphic Device Interface) [#API_GDI]
|CENTER:API名称|CENTER:用途|h
|[[GetDialogBaseUnits:http://support.microsoft.com/kb/145994]]|ダイアログベース単位を取得|
|MapDialogRect|ダイアログベース単位を、スクリーン単位[Pixel]に変換|
|GdiFlush|呼び出し側スレッドの現在のバッチをフラッシュします|
|GdiSetBatchLimit|呼び出し側スレッドの現在のバッチに蓄積できる関数の最大数を設定|
|LockWindowUpdate|指定されたウィンドウ内での描画を無効または有効にします|
|AlphaBlend|αブレンド処理|
|TransparentBlt|透過Bit転送|
|PathCompactPath|縮めた形式のパスを取得|
|SetSysColors|画面のデザインに使われている表示要素の色を設定|
|GetGuiResources|指定されたプロセスが使っているGUIオブジェクトのハンドル数を返す|

-関連
:[[Platform SDK Redistributable: GDI+:http://www.microsoft.com/downloads/details.aspx?familyid=6A63AB9C-DF12-4D41-933C-BE590FEAA05A&displaylang=en]]|This contains the redistributable files for GDI+.
:[[gdi++.dll:http://drwatson.nobody.jp/gdi++/]]|gdi++.dll は、Windows のシステムファイルの一つ、 gdi32.dll の動作を横取りし、文字描画を担当する API をオーバーライドすることで、フォントの表示品質を改善します。
:[[gdi++.dll(FreeType版):http://www18.atwiki.jp/gdiplus2/]]|gdi++.dll は、 Windows の gdi32.dll に代わってフォントのレンダリングを行い、これまでになく美しいスクリーンフォントを実現するオープンソースのソフトウェアです。 
:[[gdipp:http://code.google.com/p/gdipp/]] <BSD>|The gdipp (codename) project is a replacement of the Windows default text render, which brings to you the effect of text like Mac OS and Linux distributions. It is easy to use with unnoticeable overhead, and it is fully customizable.
The project is originated as the relaunch of the suspended gdi++.dll project.
:[[mactype:http://code.google.com/p/mactype/]] <Apache License V2.0>|Ultimate font Rasterizer for Windows.

**[[IME(Input Method Editor)>link集/アプリ系#FEP]] [#API_IME]

|CENTER:API名称|CENTER:用途|h
|ImmDisableIME|プロセス内の1つのスレッドまたはすべてのスレッドのIMEを無効にする|

-関連
:[[MS-IME.h:http://www.microsoft.com/en-us/download/details.aspx?id=9739]]|This download provides the public MSIME.h API for use by developers when customizing applications for the 2007 Microsoft Office System.
&br;IME 2000〜IME 2003, Microsoft IME, Office IME 2007〜Office IME 2010に対応。

**レジストリ操作 [#API_Registry]
|CENTER:Win32|CENTER:Win32(Shell)|h
|RegCreateKeyEx|-|
|RegDeleteKey|SHDeleteKey, SHDeleteEmptyKey|
|RegOpenKeyEx|-|
|RegCloseKey|-|
|RegGetValue|SHGetValue|
|RegSetValueEx|SHSetValue|
|RegQueryInfoKey|SHQueryInfoKey|
|RegQueryValueEx|SHQueryValueEx|
|RegEnumKeyEx|SHEnumKeyEx|
|RegEnumValue|SHEnumValue|
//|||

**浮動小数点制御 [#API_Float]
|CENTER:API名称|CENTER:用途|h
|fmod|浮動小数点数の剰余を計算。浮動小数値向けの%演算子|
|modf|浮動小数点値を小数部分と整数部分に分割|
|_finite|与えられた倍精度の浮動小数点値が有限であるかどうか|
|_fpclass|浮動小数点のクラスの情報を含むステータス ワードを返す|
|[[_clear87&br;_clearfp:http://msdn.microsoft.com/ja-jp/49bs2z07.aspx]]|浮動小数点ステータス ワードを取得し、クリアする|
|_control87&br;_controlfp ((「_controlfp( 0, _MCW_EM );」というのをmain関数にいれてみたら至る所で例外でまくり・・・orz。__try〜__except節と_fpieee_fltを使用すれば例外の捕捉は可能。)) ((浮動小数点に関しては、Wikipediaの [[IEEE754(ja):http://ja.wikipedia.org/wiki/IEEE754]] / [[IEEE754(en):http://en.wikipedia.org/wiki/IEEE_floating-point_standard]] が詳しい。))&br;[[__control87_2:http://msdn.microsoft.com/ja-jp/e9b52ceh.aspx]]|浮動小数点制御ワードの取得と設定を行います|
|[[_status87&br;_statusfp&br;_statusfp2:http://msdn.microsoft.com/ja-jp/9st43tcf.aspx]]|浮動小数点のステータス ワードを取得|
|[[_fpieee_flt:http://msdn.microsoft.com/ja-jp/te2k2f2t.aspx]]|IEEE 浮動小数点例外のユーザー定義トラップ ハンドラを呼び出します|

:[[Dealing with Floating-point Exceptions in MSVC7\8:http://www.devx.com/cplus/Article/34993/1954]]|VC++ 7.1の_control87()ではSSE2の浮動小数点例外制御ができないので、アセンブラで設定する必要があり、その設定例。

**システム情報 [#API_SysInfo]
|CENTER:API名称|CENTER:用途|h
|[[GetSystemMetrics:http://msdn.microsoft.com/ja-jp/cc429812.aspx]]|様々なシステムメトリックの値(表示要素の幅と高さ)とシステムの現在の構成を取得|
|[[GetNumberFormat:http://msdn.microsoft.com/ja-jp/cc447934.aspx]]|指定した数字文字列を、指定したロケール用にカスタマイズされた数字文字列として書式化する|
|[[GetCurrencyFormat:http://msdn.microsoft.com/ja-jp/cc422082.aspx]]|数字文字列を、指定したロケールの通貨文字列として書式化する|
|[[GetDateFormat:http://msdn.microsoft.com/ja-jp/cc422084.aspx]]|日付を書式化して、指定されたローケルに対応する日付文字列を作成|
|[[GetTimeFormat:http://msdn.microsoft.com/ja-jp/cc447950.aspx]]|時刻を書式化フォーマットして、指定されたローケルに対応する時刻文字列を作成|
|[[GetLocaleInfo:http://msdn.microsoft.com/ja-jp/cc422087.aspx]]|コントロールパネルの「地域のオプション」情報の取得|
|[[GetDeviceCaps:http://msdn.microsoft.com/ja-jp/cc428670.aspx]]|指定されたデバイスに関するデバイス固有の情報を取得|
|[[GetSystemInfo:http://msdn.microsoft.com/ja-jp/cc429808.aspx]]|現在のシステムに関する情報(ページのサイズやプロセッサの種類など)を取得|
|[[GetNativeSystemInfo:http://msdn.microsoft.com/ja-jp/ms724340.aspx]]|こちらはx64の環境でもちゃんと情報を取得可能。但しWindows XP以降で利用可能。|
|[[SystemParametersInfo:http://msdn.microsoft.com/ja-jp/cc429946.aspx]]|システム全体に関するパラメータのいずれかを取得または設定|
|[[LCTYPE Constants:http://msdn2.microsoft.com/ja-jp/bb507201.aspx]]|CURRENCYFMT構造体の設定値|
|[[localeconv:http://msdn.microsoft.com/ja-jp/8658zdx3.aspx]]|ロケールの設定に関する詳細情報を取得|

**システム終了・再起動 [#API_Shutdown]
:[[Power Management Functions:http://msdn.microsoft.com/en-us/aa373163.aspx]]|
:[[電源管理:http://msdn.microsoft.com/ja-jp/cc429161.aspx]]|
:[[システムシャットダウン:http://msdn.microsoft.com/ja-jp/cc429374.aspx]]|
:[[Microsoftサポートオンライン > [PRB] ExitWindowsEx API が Windows NT を再起動しません。:http://support.microsoft.com/kb/176695/]]|シャットダウン系のAPIを呼び出す場合は、SE_SHUTDOWN_NAME 特権を取得する必要がある。

**Socket [#API_Socket]
|CENTER:CRT(ANSI)|CENTER:WinSock|CENTER:WinXP拡張 ((Windows Server 2003 SP1 Platform SDKに定義あり))|CENTER:備考|h
|socket|WSASocket|-||
|closesocket|-|-||
|shutdown|-|-||
|bind|-|-||
|listen|-|-||
|connect|WSAConnect|ConnectEx||
|accept|AcceptEx&br;WSAAccept|-||
|-|-|GetAcceptExSockaddrs||
|select|WSAAsyncSelect|-||
|send|WSASend|-||
|sendto|WSASendTo|-||
|recv|WSARecv|-||
|-|WSARecvFrom|-||
|-|TransmitFile|TransmitPackets||
|ntohs|WSAHtons|-|short型|
|htons|WSANtohs|-|short型|
|htonl|WSAHtonl|-|long型|
|ntohl|WSANtohl|-|long型|
|-|WSAAddressToString|-||
|-|WSAStringToAddress|-||
//|||-||
#br
-参考情報
:[[KSK's Web Page:http://www.kt.rim.or.jp/~ksk/indexj.html]]|Winsock Programmer's FAQ(in Japanese)/Programming UNIX Socket FAQ等。
:[[EternalWindows:http://eternalwindows.jp/index.html]] > ネットワーク > [[Winsock:http://eternalwindows.jp/network/winsock/winsock00.html]]|Windows XP/Vistaで追加されたWSA系APIの解説有り。

**シリアル通信 [#API_SerialPort]
|CENTER:API名称|CENTER:用途|h
|BuildCommDCB|指定したDCB構造体に、デバイス制御文字列で指定した値を格納|
|BuildCommDCBAndTimeouts|指定したDCB構造体に、デバイス制御文字列で指定した値を格納しデバイスのタイムアウト値の設定やタイムアウトの解除も可能|
|GetCommState|指定した通信デバイスの現在の制御設定をDCB 構造体に格納|
|SetCommState|DCB 構造体の指定に従って通信デバイスを構成|
|GetCommTimeouts|指定した通信デバイスで実行されるすべての読み書き操作のタイムアウトパラメータを取得|
|SetCommTimeouts|指定した通信デバイスで実行されるすべての読み書き操作のタイムアウトパラメータを設定|
|SetCommConfig|通信デバイスの現在の構成を設定|
|GetCommConfig|通信デバイスの現在の構成を取得|
|GetCommProperties|指定した通信デバイスの通信プロパティの情報を取得|
|ClearCommError|通信エラーの情報を取得して、通信デバイスの現在の状態を通知|
|SetCommBreak|指定した通信デバイスの文字送信を中断|
|ClearCommBreak|指定した通信デバイスの回線切断状態を解除し、文字送信を再開|
|EscapeCommFunction|指定した通信デバイスに、拡張機能を実行するよう指示|
|PurgeComm|指定した通信資源の出力バッファまたは入力バッファにあるすべての文字を破棄|
|WaitCommEvent|指定した通信デバイスでイベントが発生するのを待機|
|SetCommMask|特定の通信デバイスで監視する一連のイベントを指定|

-関連情報
:[[Microsoft サポートオンライン > COM10 以上のシリアルポートを指定する方法:http://support.microsoft.com/kb/115831/]]|CreateFile() は、ファイル名に "COM1" から "COM9" を使用した場合は、正常に終了しますが、"COM10" またはそれ以上のポート番号を使用すると、"INVALID_HANDLE_VALUE"というメッセージが返されます。
:[[Microsoft サポートオンライン > SetCommMask() による WaitCommEvent() のキャンセル:http://support.microsoft.com/kb/105302/]]|

**SIMD(Single Instruction Multiple Data) [#API_SIMD]
:VisualC++.NET 2003以降ではSSE/SSE2を利用するオプションが有る。|
&ref(JunkBox/DotNET2003.png,nolink);
&br;少しでも速いコードを追い求める人は「[[link集/開発言語系/C++#Dev_Tech_FastCode]]」を参照方。
:VisualC++.NET 2002以降で追加されたマニア向け?なAPI達。|
|CENTER:API名|CENTER:説明|h
|[[_aligned_malloc&br;_aligned_realloc&br;_aligned_free:http://msdn.microsoft.com/ja-jp/8z34s9c6.aspx]]|通常はMMX/SSE向けに16byteアラインメントする。Intel C++ Compilerの組み込み関数 _mm_malloc/_mm_free と同義。define定義されているので、_mm_malloc/_mm_free でコードを書いてもビルド可能。&br;因みにstackで確保する場合は下記のようにする。&br; __declspec(align(16)) float afData[ 1000 ];|
|[[_set_SSE2_enable:http://msdn.microsoft.com/ja-jp/bthd138d.aspx]]|以下の関数には、_set_SSE2_enable で有効にできる SSE2 の実装があります。&br;atan, ceil, exp, floor, log, log10, modf, pow&br;既定では、SSE2 の実装をサポートするプロセッサでは有効になっています。|
|[[__cpuid:http://msdn.microsoft.com/ja-jp/hskdteyh.aspx]]|Generates the cpuid instruction that is available on x86 and x64.|
|[[__cpuidex:http://msdn.microsoft.com/en-us/hskdteyh.aspx]]|Generates the cpuid instruction that is available on x86 and x64.|
|[[IsProcessorFeaturePresent:http://msdn.microsoft.com/ja-jp/cc429892.aspx]]|搭載されているプロセッサが特定機能をサポートしているかどうかを調べる|
//|||

-参考情報
:[[MMX, SSE, and SSE2 Intrinsics:http://msdn.microsoft.com/ja-jp/y0dh78ez.aspx]]|
:[[Dealing with Floating-point Exceptions in MSVC7\8:http://www.devx.com/cplus/Article/34993/1954]]|VC++ 7.1の_control87()ではSSE2の浮動小数点例外制御ができないので、アセンブラで設定する必要があり、その設定例。
:[[Intel SDK for 45nm Next Generation Intel&reg; Core&trade;2 Processor Family and Intel&reg; SSE4(Penryn SDK):http://softwarecommunity.intel.com/articles/eng/1193.htm]]|Windows環境向けのSSE4エミュレータDLLや、VisualStudio 2005のMASM向けのSSE4マクロが付属する。
:[[Xbyak - x86, x64 JIT assembler -:http://homepage1.nifty.com/herumi/soft/xbyak.html]] <BSD>|Xbyak(カイビャック)はx86(IA32), x64(AMD64, x86-64)のマシン語命令を生成するC++のクラスライブラリです. プログラム実行時に動的にアセンブルすることが可能なため, 柔軟な最適化(動的コード生成)が可能となります(利用シーン:量子化の高速化, 式の計算).
:[[SSEPlus:http://sf.net/projects/sseplus]] <Apache License V2.0>|SSEPlus is a SIMD function library. It provides optimized emulation for newer SSE instructions. It also provides a rich set of high performance routines for common operations such as arithmetic, bitwise logic, and data packing and unpacking. 

-関連ページ
:[[link集/開発言語系/AssemblyLanguage]]|

**デバッグ [#API_Debug]
|CENTER:CRT(ANSI)|CENTER:Win32|CENTER:MFC|CENTER:ATL|h
|-|OutputDebugString|-|-|
|-|DebugBreak|AfxDebugBreak|-|
|abort|-|AfxAbort|-|
|-|IsBadCodePtr&br;IsBadReadPtr&br;IsBadWritePtr|[[AfxIsValidAddress:http://msdn.microsoft.com/ja-jp/s240k6fz.aspx]]|AtlIsValidAddress|
|-|IsBadStringPtr|AfxIsValidString|AtlIsValidString|
|-|IsDebuggerPresent|-|-|
|[[_heapchk:http://msdn2.microsoft.com/ja-jp/2xse74he.aspx]]|[[_CrtCheckMemory:http://msdn.microsoft.com/ja-jp/e73x0s4b.aspx]]|[[AfxCheckMemory:http://msdn.microsoft.com/ja-jp/8yfacbfy.aspx]]|-|
||[[_CrtIsValidPointer:http://msdn.microsoft.com/ja-jp/0w1ekd5e.aspx]]&br;[[_CrtIsValidHeapPointer:http://msdn.microsoft.com/ja-jp/ys6cfhhh.aspx]]|-|-|
|-|[[SetErrorMode:http://msdn.microsoft.com/ja-jp/cc428987.aspx]]|-|-|
|-|[[SymInitialize:http://msdn.microsoft.com/ja-jp/cc429030.aspx]]|-|-|
//|||-|-|

:[[Microsoft Debugging Tools for Windows:http://www.microsoft.com/japan/whdc/devtools/debugging/default.mspx]]|Debugging Tools for Windows は、Windows NT 4.0、Windows 2000、Windows XP、Windows Server 2003、Windows Vista、および Windows Server コード名 "Longhorn" を実行しているシステムで、ドライバ、アプリケーション、サービス、およびオペレーティング システム自体をデバッグするのに使用できます。

-関連情報
:[[社元@ワック Blog > IsBadReadPtr, IsBadWritePtr APIが禁止に - Windows Vista:http://www.ailight.jp/blog/sha256/archive/2006/09/09/11995.aspx]]|Windows Vistaでは、IsBadReadPtr, IsBadWritePtr API が禁止(廃止?)になったらしい。
:[[DebugInfo.com:http://www.debuginfo.com]]|CallStackを取ったりするサンプルの公開。

**その他 [#API_ETC]
:[[AddERExcludedApplication() / ErrorRep.h / Faultrep.dll:http://msdn.microsoft.com/ja-jp/bb513614.aspx]]|[[Object Media Limited > Software Hints and Tips:http://www.objmedia.demon.co.uk/hintsAndTips/hintsAndTips.html]] からの情報。
&br;WindowsXP/WindowsServer2003上でアプリが落ちた時に表示されるエラー送信ダイアログの表示内容を変更する。
&br;これで自分のバグをMicrosoftへ送信されるという恥ずかしい行為を防ぐ事が可能!?
:[[BindImageEx:http://msdn.microsoft.com/ja-jp/cc429032.aspx]]|イメージをバインドするプロセスは、インポートされた各関数の仮想アドレスを計算する作業によって構成されています。次に、計算された仮想アドレスをインポート側のイメージのインポートアドレステーブル(IAT)に保存します。この結果、インポートされた各関数の仮想アドレスをシステムローダーが計算する必要がなくなるので、特にイメージが多くの DLL を使っている場合、イメージのロードが非常に高速になります。対応するシンボルファイルが見つかった場合、そのファイルのタイムスタンプとチェックサムを更新します。
:[[社本@ワック Blog > 64bit版 Windows のバージョンの判別 - Windows System Information:http://www.ailight.jp/blog/sha256/archive/2004/12/16/3355.aspx]]|[[IsWow64Process():http://msdn.microsoft.com/ja-jp/library/ms684139.aspx]]を使うらしい。
:備忘録|
|CENTER:API名|CENTER:説明|h
|[[_byteswap_uint64&br;_byteswap_ulong&br;_byteswap_ushort:http://msdn.microsoft.com/ja-jp/a3140177.aspx]]|ByteSwap関数と言えば今まで下記のAPI位しかなかった。&br;_swab, ntohs/htons, htonl/ntohl,&br;WSAHtons/WSANtohs, WSAHtonl/WSANtohl|
//|||

*COM(Component Object Model) [#COM]
:[[link集/Microsoft関連#COM]]|別ページを参照方。

*ATL(Active Template Library) [#ATL]
:[[Microsoft VisualC++ 技術資料:http://www.microsoft.com/japan/msdn/visualc/techinfo/articles.asp]]|
:[[Microsoft VisualC++ 技術ドキュメント:http://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/default.htm]]|
:[[Microsoftサポートオンライン > [INFO] ATL (Active Template Library) に関してよく寄せられる質問:http://support.microsoft.com/kb/166480]]|

-Microsoft外
:[[DevInstinct inc. > ATL Extension:http://pages.infinit.net/malap/Eng/atlext.htm]]|
:[[Virtual Truth Lab.:http://lamoo.s53.xrea.com/index.html]]|
:[[Chris's Free Developer Tools:http://www.sellsbrothers.com/tools/]]|This is a set of .NET, COM and Win32 tools that Chris Sells has built and contributed to the world.
:[[CodePlex > ATL Server Library and Tools:http://www.codeplex.com/AtlServer/]] <[[MS-LPL(Microsoft Limited Permissive License):http://www.codeplex.com/AtlServer/Project/License.aspx]]>|ATL ServerがOSS化。

-関連書籍
:&amazon(4756132804,title);|
:&amazon(4797306890,title);|
:&amazon(4881356992,title);|
:&amazon(4774108618,title);|
:&amazon(0789727773,title);|
:&amazon(0321159624,title);|
//:&amazon(,title);|

*WTL(Windows Template Library) [#WTL]
:[[SourceForge.net > Windows Template Library (WTL):http://sf.net/projects/wtl]] <CPL>|
:[[Microsoft > Windows Template Library (WTL) 7.5:http://www.microsoft.com/downloads/details.aspx?FamilyID=48CB01D7-112E-46C2-BB6E-5BB2FE20E626&displaylang=en]]|ライセンス周りが変更になっているのみでSourceForgeのWTLプロジェクトがリリースした WTL75 Final と同内容。
:[[Microsoft > Windows Template Library (WTL) 7.1:http://www.microsoft.com/downloads/details.aspx?FamilyID=1be1eb52-aa96-4685-99a5-4256737781c5&DisplayLang=en]]|

-関連情報
:http://www.codeguru.com/Cpp/COM-Tech/atl/|
:[[The CodeProject > WTL:http://www.codeproject.com/wtl/]]|
:[[WTL support list:http://groups.yahoo.com/group/wtl/]]|WTLのML
:[[IDevResource.com:http://www.idevresource.com/wtl/]]|
:[[Roy.'s Homepage:http://homepage1.nifty.com/Roy_/index.htm]]|
:[[The So-Software Studio:http://home.att.ne.jp/banana/akatsuki/]]|
:[[Bohemian St. > CODING:http://hp.vector.co.jp/authors/VA022575/]]|
:[[P-Stade:http://hp.vector.co.jp/authors/VA016589/index_japanese.htm]]|
:[[かっとし の 記録場所:http://www.mars.dti.ne.jp/%7Ekattoshi/]]|

*[[DDK(Device Driver Development Kit):http://www.microsoft.com/whdc/devtools/ddk/default.mspx]] [#DDK]
:[[WHDC:http://www.microsoft.com/japan/whdc/]]|
:[[Windows Developers Site:http://www.microsoft.com/japan/developer/winds/]]|
:[[Windows Driver Foundation (WDF):http://www.microsoft.com/japan/whdc/driver/wdf/default.mspx]]|WDF は、カーネル モードまたはユーザー モードの、オブジェクト指向のイベント駆動型ドライバの作成をサポートする、単一のドライバ モデルを定義します。

**Tutorial
:[[CodeZine > カスタムプリントプロセッサで印刷機能を強化する:http://codezine.jp/a/article.aspx?aid=217]]| [中級]  DDKのサンプルを利用したプリントプロセッサの自作

**関連書籍
:&amazon(4774116661,title);|
:&amazon(4797309814,title);|
:&amazon(4894710676,title);|
:&amazon(4774131687,title);|
:&amazon(4797343222,title);|
:&amazon(0735623740,title);|
//:&amazon(,title);|

-WDM(Windows Driver Model)
:&amazon(4756139132,title);|
:&amazon(4756133959,title);|
:&amazon(4756133967,title);|
:&amazon(4881358618,title);|
//:&amazon(,title);|

-USB(Universal Serial Bus)
:&amazon(4774118419,title);|
:&amazon(4434155520,title);|
&amazon(4434084607,title);
&br;&amazon(4434021656,title);
:&amazon(4789833194,title);|
:&amazon(4789838293,title);|
:&amazon(0970284659,title);|
:&amazon(4789834506,title);|
//:&amazon(,title);|

*Tool [#Tool]
:[[The Code Project > VC++7 to VC++6 project converter:http://www.codeproject.com/tools/prjconverter.asp]]|VC++.NET2002のプロジェクト(*.vcproj, *.sln)をそれぞれVC++6.0のプロジェクト(*.dsp, *.dsw)に変換するプログラム。

-関連ページ
:[[link集/開発補助ツール系#Profiler]]|プロファイラはこちらのページを参照方。
:[[link集/Microsoft関連#VSAddIn]]|Add-in関連はこちらのページを参照方。

*Tips [#TIPS]
:[[JunkBox#Memorandum_Programming_Windows]]|JIT(Just-In-Time)デバッガ設定についてはこちらのページを参照方。

:VisualC++のmain関数|UNICODE版のまとめ
|CENTER:関数|CENTER:定義|CENTER:エントリポイント|h
|ConsoleApp&br; + ANSI|int main( int, char* [] )|CENTER:-|
|ConsoleApp&br; + WIDE|int wmain( int, wchar_t* [], wchar_t* [] )|wmainCRTStartup|
|ConsoleApp&br; + Macro|int _tmain( int, TCHAR* [], TCHAR* [] )|CENTER:適宜使い分け|
|WindowApp&br; + ANSI|INT WINAPI&br; WinMain( HINSTANCE, HINSTANCE, LPSTR, INT )|CENTER:-|
|WindowApp&br; + WIDE|INT WINAPI&br; wWinMain( HINSTANCE, HINSTANCE, LPWSTR, INT )|wWinMainCRTStartup|
|WindowApp&br; + Macro|INT WINAPI&br; _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, INT )|CENTER:適宜使い分け|

:VisualC++の非MFCプロジェクトで TRACE, ASSERT が使いたい|<crtdbg.h>に、_RPT0〜_RPT4, _RPTF0〜_RPFT4, _ASSERT, _ASSERTE の定義有り。
&br;<assert.h>のassert()を使用する事も可能。

:IDE上でユーザ定義文字列の色付け|USERTYPE.DATというファイルを作成し、
 # 「#」はコメント行として扱われる模様
 # データ型
 wchar_t
 DWORD
 BOOL
 POINT
 LRESUT
 HANDLE
 HWND
 HICON
 HBITMAP
 # 定数
 TRUE
 FALSE
VC++のIDE(VC++6.0:msdev.exe, VC++.NET 2002以降:devenv.exe)の有る場所にコピーする。~
VisualC++ 6.0
 C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin
VisualC++ .NET 2002
 C:\Program Files\Microsoft Visual Studio .NET\Common7\IDE
VisualC++ .NET 2003
 C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE
VisualC++ 2005
 C:\Program Files\Microsoft Visual Studio 8\Common7\IDE

:IDEで開いているソースコードをテキストエディタで開く|VisualC++6.0 - IDEの[ツール(T)]->[カスタマイズ(C)...]の「ツール」タブで設定。
|テキストエディタ名称|「引数(A):」への設定内容|h
|EmEditor v3/v4|/l $(CurLine) "$(FilePath)"|
|K2Editor|"$(FilePath)" /j$(CurLine)|
|秀丸エディタ|/j $(CurLine) $(FilePath)|
&br;VisualC++.NET2002以降 - IDEの [ツール(T)]->[外部ツール(E)...] で設定。
|テキストエディタ名称|「引数(R):」への設定内容|h
|EmEditor v3/v4|/l $(CurLine) "$(ItemPath)"|
|K2Editor|"$(ItemPath)" /j$(CurLine)|
|秀丸エディタ|/j $(CurLine) $(ItemPath)|
|サクラエディタ|"$(ItemPath)" -Y=$(CurLine)|
|MKEditor|/J $(CurLine) "$(ItemPath)"|

:Warning: no message line prompt for ID 0xE001.|MFCで作成したプロジェクトで文字列リソースを全て削除しているとVC++のアウトプットウィンドウに下記メッセージが表示される。
 Warning: no message line prompt for ID 0xE001.
原因はMFC内部で利用する「AFX_IDS_IDLEMESSAGE = 0xE001(57345)」に対応する文字列が未登録になる為。~
リソースに下記内容を登録する事で回避可能。
 STRINGTABLE PRELOAD DISCARDABLE 
 BEGIN
     AFX_IDS_APP_TITLE       "MfcApp"
     AFX_IDS_IDLEMESSAGE     "Ready"
 END


-Microsoftサポート情報
:[[[HOWTO] クラスの内部および外部にある STL コンポーネントをエクスポートする方法:http://support.microsoft.com/kb/q168958/]]|Visual C++ 5.0 以降、テンプレート クラスのインスタンス生成を強制し、インスタンス化したものをエクスポートすることが可能になりました。
&br;現在エクスポートできる唯一の STL コンテナは vector です。そのほかのコンテナ (つまり、map、set、queue、list、deque) にはすべて、ネストしたクラスが含まれており、エクスポートすることはできません。

-MSDN ライブラリ
:[[コンパイラの警告 (レベル 1) C4995:http://msdn.microsoft.com/ja-jp/8wsycdzs.aspx]]|「deprecated」プラグマを利用して、もう使って欲しくないI/Fを使用している場合に警告を出す方法。
:[[コンパイラの警告 (レベル 1) C4353:http://msdn.microsoft.com/ja-jp/2a68558f.aspx]]|これからは「(void)0」ではなく「__noop」(NoOperationの意味?)を使用する。
:[[Visual C++ 6.0 と Visual C++ .NET の主な違い:http://msdn.microsoft.com/ja-jp/cc438616.aspx]]|

:[[The new and delete Operators:http://msdn.microsoft.com/ja-jp/kftdy56f.aspx]]|VC++ .NET 2002以降では、「thrownew.obj」をリンクする事で「std::bad_alloc」例外を投げるようになります。
&br;但し、それは通常のC++プログラムの場合の話で、MFCの場合は今まで通り「CMemoryException」例外なので注意。
&br;[[Extraview Ltd - VC Tips(WebArchive):http://web.archive.org/web/20041211074306/http://www.extraview.co.uk/vc_tips.htm]] - newの失敗時にstd::bad_alloc例外を投げないVC++のnewを例外を投げるようにする方法。

:[[Resources in Static Libraries?:http://www.experts-exchange.com/Programming/Programming_Platforms/Win_Prog/Q_20160798.html]]|Static Libraryにリソースデータを組み込んでみようという試み。

:[[Deep C++:http://msdn.microsoft.com/ja-jp/cc440188.aspx]]|予約名等の情報。よくやりがちなdefine定義で「_(アンダーバー)」で始まる定義を使用すると規約違反となるので注意。

:[[ウォッチ変数の書式指定記号:http://msdn.microsoft.com/ja-jp/cc418036.aspx]]|次の表の書式指定記号を使って [クイック ウォッチ] ダイアログ ボックスやウォッチ ウィンドウの変数の表示書式を変更できます。

:[[浮動小数点数の精度の低下:http://msdn.microsoft.com/ja-jp/c151dt3s.aspx]]|通常、浮動小数点 10 進値には正確な 2 進表現がありません。これは、CPU による浮動小数点データの表現方法に起因するものです。このため、精度が減少したり、浮動小数点演算で予期しない結果になることがあります。

:[[Visual C++/MFCに関するFAQ:http://msdn.microsoft.com/ja-jp/cc403767.aspx]]|古い情報。

:[[__super:http://msdn.microsoft.com/ja-jp/94dw1w7x.aspx]]|The __super keyword allows you to explicitly state that you are calling a base-class implementation for a function that you are overriding.

:[[注釈を使って C/C++ のコード障害を減らす方法:http://msdn.microsoft.com/ja-jp/ms182032.aspx]], [[Header Annotations:http://msdn.microsoft.com/ja-jp/aa383701.aspx]]|Win32API関数のヘッダ定義に付いている__in/__out等の注釈の解説。

**VisualC++ 2010
:[ツール]-[オプション]-[プロジェクト及びソリューション]-[VC++ディレクトリ]の移動先|
プロジェクトの[プロパティ]-[VC++ディレクトリ]
&br;プロパティシートの「Microsoft.Cpp.Win32.user((Win32の部分はプラットフォーム毎に変わる))」に設定情報は保存されている。

**VisualC++ 2005
:[[Certain code functions may not behave as expected when you use Unicode information in Visual C++:http://support.microsoft.com/kb/937465]]|
[[std::fstream 複数バイト文字が含まれているパス上のファイルへのアクセス :http://social.msdn.microsoft.com/Forums/ja-JP/vcgeneralja/thread/e27cce39-fae4-4727-89b1-43d08e1a9ec2]]
&br;[[wcoutのlocale:http://social.msdn.microsoft.com/forums/ja-JP/vcexpressja/thread/8e5b23b4-c8e1-489a-ae45-b8c64f80df1a/]]
&br;VisualC++ 2005ではUnicodeのサポートが強化された代わりに、ロケール情報を正しく設定していないとSTLのストリーム系関数でマルチバイト文字列を処理する際に不具合が発生する。対処方法としては下記のようにロケールの宣言を明記する。
--STL
 #include <locale>
 int main() // WinMain()/CXXXApp::CXXXApp()/・・・
 {
     std::locale::global( std::locale("japanese") );
     ・・・
 }
--Win32
 #include <locale.h>
 int main() // WinMain()/CXXXApp::CXXXApp()/・・・
 {
     (void)::_tsetlocale( LC_ALL, _T("japanese") );
     ・・・
 }

:_CrtDbgReport: String too long or IO Error|TRACEマクロにマルチバイト文字列を指定すると発生。解消方法としては上記のロケール宣言を行う。

:WindowsXPでデバッガを起動すると固まる|MS-IMEが原因。
&br;解決策 Д灰鵐肇蹇璽襯僖優襪痢崔涌茲噺生譴離プション」->「言語」タブ->「詳細」ボタン->「詳細設定」タブ->「詳細なテキスト サービスをオフにする」にチェックを''入れる''
&br;解決策◆Justsystem社の[[ATOK:http://atok.com]]を利用する。こちらがお薦め。

:[[タスク一覧のコメントを作成する:http://msdn.microsoft.com/ja-jp/zce12xx2.aspx]]|TODO:, HACK:, UNDONE:等の文字列をソースコードのコメントに入れておくとタスク一覧で管理可能。
:[[<stdint.h> for Visual C++:http://www.vector.co.jp/soft/win95/prog/se432866.html]]|Visual C++ 7.1/8.0で使用可能な<stdint.h>

**VisualC++ 6.0
:VisualC++ 6.0 の[ツール(T)]-[オプション(O)...]-[ディレクトリ]の設定内容の保存場所|DirectX SDKのアンインストール時にぶっ壊れた事があったので。
 HKEY_CURRENT_USER
 +Software
  +Microsoft
   +DevStudio
    +6.0
     +Build System
      +Components
       +Platforms
        +Win32 (x86)
         +Directories

:VisualC++ 6.0のプロジェクトファイルの複数起動|標準では、プロジェクトファイル(*.dsp/*.dsw)のDDE(Dynamic Data Exchange)機能が有効になっており、IDEが複数起動するのを抑止している。この機能を無効にすると複数起動するようになる。
&br;&ref(JunkBox/VCPP60_PROJECT.png,nolink);

:VC++6.0(Professional/Enterprise)のプロファイラ機能の利用方法|普通に利用するのは難しい模様。
&br;%%[[Gen'ya Sakruai's Web Pages > G.R.I.D. > Visual C++ のprofile機能(プロファイラ)を使ってみたい:http://www.cmpt.phys.tohoku.ac.jp/~genya/vcprof.html]]%%
&br;%%[[水無瀬の部屋 > Programming Tips > Visual C++:http://www.hidecnet.ne.jp/~sinzan/tips/vc.htm]]%%

:VisualC++で特定の拡張子をC/C++のソースとして認識させる|[[Microsoftサポートオンライン > How to make Visual C++ recognize file extensions as C/C++ files:http://support.microsoft.com/kb/181506]]
&br;「*.hh」のファイルをVC++6.0で「*.h」と同様に認識させるには、レジストリの下記の値を変更するとうまくいった。
 HKEY_CURRENT_USERSoftwareMicrosoft
  DevStudio
   6.0
    Text Editor
     Tabs/Language Settings
      C/C++
       FileExtensions
(変更前)
 cpp;cxx;c;h;hxx;hpp;inl;tlh;tli;rc;rc2
(変更後)
 cpp;cxx;c;h;hh;hxx;hpp;inl;tlh;tli;rc;rc2

**Tips集へのLink

:[[Belution.com > VisualCフォーラム > アプリケーションエラーとMapファイル:http://forums.belution.com/ja/vc/000/160/49s.shtml]]|ビルド時に生成される*.mapファイルを使って、Releaseビルドのプログラムで落ちた場所を特定する方法。

:[[秀まるおのホームページ > おまけ 開発者向け情報:http://hide.maruo.co.jp/programming.html]]|__try〜__exceptハンドラの利用方法。

:[[The Code Project - Message with sytle:http://www.codeproject.com/macro/location_pragma.asp]]|VC++の #pragma message でタグジャンプ出来るようにするマクロ。VC++の6.0/7.0/7.1/8.0/9.0で動作確認済み。VC++6.0〜7.1ならF4キー、VC++8.0以降ならF8キーで飛べる。
 #pragma message( __LOC__ "FixMe!" )
上記の内容をhoge.cppに記述すると、アウトプットウィンドウに以下の内容が出力される。
 C:hogehogehoge.cpp(777) : Warning Msg: FixMe!

:%%[[Kawanoの備忘録 > 日曜プログラムの墓場:http://homepage2.nifty.com/~kawano/]]%% (2006/03/17)|Tips集。

:[[VALGUS - Orange Knowledge:http://orangeknowledge.jpn.org]]|MFC/Win32SDK/Game/DirectX Tips

:%%[[Still Green > Knowledge > プログラム(VC++):http://ww1.enjoy.ne.jp/~turikiti/knowledge/program.htm]]%% (2007/10/22)|キーボード押しっぱなし確認の判定方法等。[[WebArchive:http://web.archive.org/web/*/http://ww1.enjoy.ne.jp/~turikiti/knowledge/program.htm]]

:[[株式会社ワックドットコム > for Programmers 〜プログラマーのためのTips集〜:http://www.wac-jp.com/programmers/]]|COM/Shell関連多数。

:[[void nish > Articles:http://www.voidnish.com/Articles.aspx]]|The Code Projectにも寄稿しているTips集。

:[[Cycle of 5th > Tips > 開発:http://www.cycleof5th.com/tips/index.php?tag=dev]]|

ページ先頭へ   最終更新のRDF 最終更新のRSS
Valid XHTML 1.1 Valid CSS! [Valid RSS]