memo‎ > ‎

Visual Studio

・Visual Studio 2010の内部バージョンは10.0、Visual Studio 2005の内部バージョンは8.0
・_WIN32_WINNTの定義
 0x501 XP
 0x600 Vista
・Windows7、VS2010 の場合 cl.exe はC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin フォルダにある。
・コンソールかそうでないかの切り替えは[プロジェクト]のプロパティ>[構成プロパティ]>[リンカ]>[システム]>[サブシステム]で行う。
 このオプションを「設定なし」にすると、リンカが自動的に環境を選択する。
・プロジェクトをビルドしないようにするには[ソリューション]の構成マネージャで設定する。
・アセンブリファイルを出力するには[プロジェクト]>[プロパティ]>[構成プロパティ]>[C/C++]>[出力ファイル]>[アセンブリの出力]で設定する
・プロパティを開くショートカットキーは Shift + F4
・[オプション]>[プロジェクトおよびソリューション]に「アクティブなアイテムをソリューション エクスプローラで選択された状態にする」チェックがある。
・[プロジェクト]>[プロパティ]>[構成プロパティ]>[ビルドイベント]>[ビルド後のイベント]>[コマンドライン]でビルド後にコマンドを実行できる。
 もし、特定のフォルダ内のプログラムを実行したい場合は[オプション]>[プロジェクトおよびソリューション]>[VC++ ディレクトリ]の実行ファイル一覧にフォルダのパスを追加すればよい。
・EnvDTE は Environment Development Tools Extensibility(環境開発ツール機能拡張)の略。
・ソリューションにはプロジェクトを格納できるソリューションフォルダ(点線フォルダ)を追加できる。
warning C4996 の警告は#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 を定義することで安全な関数に置き換えることができる。(Cでは不可)
・ツールメニューの[設定のインポートとエクスポート]から設定のインポート・エクスポート・リセットができる。エディタの設定がおかしくなったときなど利用できる。
・コンソールと簡単に切り替えるため以下のようにするといいかも・・・[プロジェクト]のプロパティ>[構成プロパティ]>[リンカ]>[システム]>[サブシステム]は「設定なし」にして・・・
#define _CONSOLE //この行をコメントアウトするとコンソールが表示されません。
#ifdef _CONSOLE
#pragma comment(linker,"/SUBSYSTEM:CONSOLE")
int main(int argc, char *argv[])
#else
#pragma comment(linker,"/SUBSYSTEM:WINDOWS")
#include "windows.h"
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lpCmdLine,int nCmdShow)
#endif
・ディレクトリの変換値
 変換前文字列 Sol ソリューション、Pro プロジェクトのデバッグビルドの場合の変換後文字列
 $(Configuration) Debug
 $(IntDir) Debug
 $(MSBuildProjectname) Pro
 $(Platform)   Win32
 $(ProjectName) Pro
 $(SolutionDir) Sol (デフォルト。最初に来るのはOKだが、途中だとプロパティページでエラー)
ビルド時に最後が \ が付いていない場合、警告メッセージが表示されて、勝手に追加されるようだ。
・プロパティの出力ディレクトリ・ファイルのデフォルト設定(色々いじることがあるから一応書いておく、多分合ってるかと)
 場所 デフォルト値
 出力ディレクトリ $(SolutionDir)$(Configuration)\
 中間ディレクトリ $(Configuration)\
 ターゲット名 $(ProjectName)
 ビルド ログ ファイル $(IntDir)\$(MSBuildProjectName).log
 デバッグ>作業ディレクトリ $(ProjectDir)
 C/C++>プリコンパイル済みヘッダー ファイル $(IntDir)$(TargetName).pch
  >出力ファイル>プログラム データベース ファイルの名前 $(IntDir)vc$(PlatformToolsetVersion).pdb
  >出力ファイル  他 $(IntDir)
  >ブラウザー情報>ブラウザー情報ファイル $(IntDir)
 リンカー>出力ファイル $(OutDir)$(TargetName)$(TargetExt)
  >マニフェスト ファイル>マニフェスト ファイル $(IntDir)$(TargetName)$(TargetExt).intermediate.manifest
  >デバッグ>プログラム データベース ファイルの生成 $(TargetDir)$(TargetName).pdb
 マニフェスト ツール>入出力>マニフェスト リソース ファイル $(IntDir)$(TargetName)$(TargetExt).embed.manifest.res
 リソース $(IntDir)%(Filename).res
 XML ドキュメント ジェネレーター $(OutDir)$(TargetName).xml
 ブラウザー情報 $(OutDir)$(TargetName).bsc
・スタティックライブラリプロジェクトの設定手順(スタティックライブラリはlibフォルダに出力、デバッグバージョンは"プロジェクト名_d.lib"形式)
 ライブラリ側
 1.プロジェクトを右クリック>[プロパティ]>[構成プロパティ]>[ライブラリアン]の[出力ファイル]を Debug は$(SolutionDir)\\lib\\$(ProjectName)_d.lib、
   Release は$(SolutionDir)\\lib\\$(ProjectName).lib にする。
 2.[構成プロパティ]>[C/C++]>[コード生成]の[ランタイムライブラリ]を Debugはマルチスレッド デバッグ DLL (/MDd)、
   Releaseはマルチスレッド (/MT)にする。
 3.[構成プロパティ]>[C/C++]>[出力ファイル]の[プログラムデータベースの名前]を Debugは$(SolutionDir)\\lib\\$(ProjectName)_d.pdb、
   Releaseは$(SolutionDir)\\lib\\$(ProjectName).pdbにする。
 ライブラリを使う側
 1.プロジェクトを右クリック>[プロパティ]>[構成プロパティ]>[リンカー]>[入力]の[追加の依存ファイル]にそれぞれのライブラリファイルを加える。
   Win32APIなどを使用したいなら「親またはプロジェクトの既定値から継承」はチェックしたまま
   (#pragma comment(lib,"ライブラリパス")を使う方法もあるが、BebugとReleaseの _d 有無の切り替えが必要になる場合がある)
   ws2_32.lib などもこちら側で必要になる。
 2.プロジェクトを右クリック>[プロジェクトの依存関係]で使用ライブラリにチェックを入れる
 3.[構成プロパティ]>[VC++ ディレクトリ]のライブラリ ディレクトリにlibファイルの相対フォルダ($(SolutionDir)\libなど)を加える
 4.インクルードは[構成プロパティ]>[VC++ ディレクトリ]のインクルードディレクトリに相対フォルダ($(SolutionDir)\commonなど)を加えるか、
   インクルードを相対指定(#include "..\common\net.h"など)する
 トラブルシューティング
 1.外部参照未解決(error LNK1119・1120)が出た場合、libファイルへの参照が必要。↑ライブラリを使う側1を参照。
   使用側ソースファイルに#pragma comment(lib, "..\\lib\\library.lib")と書いてもOK
  2.error LNK1104(ライブラリファイルが開けないエラー)が出た場合、ライブラリファイルのパス指定や出力場所などを確認。ソースファイルで円記号2つあるかなど
 3.「error LNK2005: _exit は既に LIBCMTD.lib(crt0dat.obj) で定義されています。」とか出てきた。
   [構成プロパティ]>[リンカー]>[入力]の[特定の既定ライブラリの無視]で LIBCMTD を追加。MSVCRTも?これでいいのかはよくわからないorz
・サブプロジェクトでlibファイルを作成し、メインプロジェクトでfatal error LNK1120 などのライブラリエラーが出た場合は
 ①メインプロジェクトの[プロパティ]>[構成プロパティ]>[リンカー]>[入力]>[追加の依存ファイル]に[サブプロジェクト名].libを追加する。
 ②サブプロジェクトのlibファイルの出力フォルダを確認し(フォルダを直接見て調べても良い)、メインプロジェクトの[プロパティ]>[構成プロパティ]>[リンカー]>[全般]>[追加のライブラリディレクトリ]にサブプロジェクトのlibファイルフォルダ(..\Debugなど)を追加する。
 他にもメインプロジェクトを右クリック>[プロジェクトの依存関係]でメインプロジェクトでサブプロジェクトを依存先に指定することも忘れずに。
・プリプロセッサの定義一覧([構成プロパティ]>[C/C++]>[プリプロセッサ]のプリプロセッサの定義)
 マクロ 定義される条件
 _UNICODE, UNICODE [構成プロパティ]で文字セットを Unicode 文字セットを使用する にした場合
 _MBCS [構成プロパティ]で文字セットを マルチ バイト文字セットを使用する にした場合
 WIN32 
 _DEBUG デバッグビルドの場合
 NDEBUG リリースビルドの場合
 _WINDOWS [構成プロパティ]で構成の種類が アプリケーション (.exe) の場合
 _WINDLL [構成プロパティ]で構成の種類が ダイナミック ライブラリ (.dll) の場合
 _LIB  [構成プロパティ]で構成の種類が スタティック ライブラリ (.lib) の場合
 _CONSOLE  [構成プロパティ]>[リンカー]>[システム]のサブシステムが コンソール (/SUBSYSTEM:CONSOLE) の場合

・ショートカットキー
 キー 動   作 備   考
 Ctrl+J オブジェクトのメンバ一覧を表示 
 Ctrl+Shift+Space パラメータ情報の表示 
 Ctrl+K, Ctrl+I クイックヒントの表示 
 Ctrl+Space 単語の補完