VC++開発環境を整える事を考えてみる(2014.11.12 更新)
- 2014.11.12 ResEditのリンクを作者のサイトから窓の杜のページへ変更しました。
作者の用意したインストーラーにはアドウェアが含まれるようになったようです。
配布も7z形式が削除され、インストーラー形式だけに絞られたようです。善意のカンパに頼った開発には限界があると言うことを察してあげるべきかと思います。
何か作ってみようなどと漠然と考えてみても、準備すら整っていない状態で情報を集めていても時間が経って風化してしまうなんて事もしばしば。
実際にコードを触って弄ってという作業に持っていけるという事は興味を持てるという面で考えても重要かと思われます。やってみようと考える人はまずはこういう物に触ってみるべきでしょう。
必要なリソースの入手元をまとめる意味も含めて、この記事を記します。
そんな訳で2014年度向けに大幅改定、ユーザープロパティシートの設定と、64bitコンパイル環境の整備を追加しました。
ステップ1:Visual Studio の入手
ステップ2:Windows SDK 7.1の入手
ステップ3:Visual Studio 2010 SP1の適用
ステップ4:MFCとATLを何とかする
ステップ5:レガシーなDirectX SDKの入手
ステップ6:Windows Template Libraryの入手
ステップ7:リソースエディタの入手
ステップ8:ユーザープロパティシートの編集
ステップ9:64ビットコンパイル環境を整備する
Visual Studio の入手
無償で入手可能な開発環境としてVisual Studio 2010のExpress版があります。
正直、軽く何か作るくらいの意気込みならこれ+αで十分です。
なお、Visual Studio 2013 Expressで環境を作る場合はこちらの記事をご覧ください。
Microsoft Visual Studio Express
http://www.microsoft.com/ja-jp/dev/express/default.aspx
VC++2010 Webインストーラーで簡単にインストールが可能です。
SilverlightやSQLが不要な人はインストール時のチェックを外しましょう。
.NET Frameworkのフォームアプリの作成ならばここまでで十分です。
ウィザードで作成した物をベースにコントロールを配置して、それをダブルクリックするとコントロールに対する動作コードが埋め込まれて編集できます。
ネット上の文献は数ありますが、間違った知識を学習しないためにも公式のガイドツアーから始めましょう。
Visual C++ ガイド ツアー
http://msdn.microsoft.com/ja-jp/library/ms235630.aspx
Windows SDK 7.1の入手
アップデート前にWindows SDK 7.1を導入しておきましょう。サンプルディレクトリにあるソースは非常に有用です。
Download Microsoft Windows SDK 7.1 from Official Microsoft Download Center
http://www.microsoft.com/en-us/download/details.aspx?id=8279
Visual Studio 2010 SP1の適用
Windows UpdateでVisual Studio含むソフトウェア群を更新します。SDK7.1はインストーラーの不備でVisual Studio 2010 SP1適用以降にはインストール不可能なので注意しましょう。
入手可能な Windows SDK について – JAPAN Platform SDK(Windows SDK) Support Team Blog – Site Home – MSDN Blogs
http://blogs.msdn.com/b/japan_platform_sdkwindows_sdk_support_team_blog/archive/2011/04/22/windows-sdk.aspx
MFCとATLを何とかする
Express版のVisual C++にはMFCやATLが存在しません。どうしてもビルドしたい場合はWindows Driver Kitをインストールして、同梱されているライブラリを使用するという方法があります。
このWDKに含まれるATLとMFCのバージョンはそれぞれ以下の通りです。
- ATL: version 8.00.50727 (Visual C++ 2005 相当)
- MFC: version 6.0 (Visual C++ 6.0 相当)
ここで捕捉しておくと、VC++のリリースは VC++ 6.0、VC++ .NET 2002、VC++ .NET 2003、VC++2005の順にリリースされています。よって、MFCは古いため使用するのはお勧めしません。ATLの入手目的と考えて下さい。
Download WDK 7.1.0 from Official Microsoft Download Center
http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11800
これはISOファイルになりますのでメディアに書き込むかマウントするかでインストールすることになりますが、もし仮想CDドライブのソフトを未導入であれば軽量なWinCDEmuをお勧めします。ここの方が分かりやすく説明しています。
デフォルトではチェックが外れていますが、ビルド環境をインストールします。同梱のサンプルプログラムも色々参考になるので入れておきましょう。ATLやMFCだけ欲しいという人はBuild Environmentだけをチェックで構いません。
notesの方にはドライバに関連するものに限定と書いてありますが、WDKのサポートチームによると、同梱されたMFCやATLを使用してビルド、配布する事は問題なしという事です。
本格的にWindowsのコアなプログラミングをしようと考えるならば、ここの方が説明されている方法でお手ごろ価格でProfessionalが購入できるので、雑多な苦労を強いられるよりは入手してしまったほうが精神衛生上よろしいかと思われます。
レガシーなDirectX SDKの入手
DirectDraw、Direct3D7を使用したレガシーなソフトをコンパイルするために必要なDirectX SDKは以下から入手可能です。これはDirectX9とそれ以下をサポートした最終リリースです。
Download DirectX SDK – (August 2007) from Official Microsoft Download Center
http://www.microsoft.com/en-us/download/details.aspx?id=13287
なお、このSDKのIncludeフォルダ内のrpcsal.hは現行のWindows SDKの定義との差異があるためコンパイル時にエラーとなります。これをパスから読み込まれないように__rpcsal.h等にリネームしてしまいましょう。
因みにDirectX10対応の最終盤がDirectX SDK – (March 2009)、DirectX11対応の現行がDirectX SDK – (June 2010) となっています。
Download DirectX SDK – (March 2009) from Official Microsoft Download Center
http://www.microsoft.com/en-us/download/details.aspx?id=3035
Download DirectX SDK – (June 2010) from Official Microsoft Download Center
http://www.microsoft.com/en-us/download/details.aspx?id=6812
Windows Template Libraryの入手
必要に応じて、軽量なアプリケーション作成のためにWTLを導入。
Express版にはATLが入っていないため、前段階のWDKのインストールは必須となります。
Windows Template Library
http://wtl.sourceforge.net/
この記事を再編集している現在(2014.02.05)WTL 9.0がリリースされています。
WTLに関してはちょうどSVNのリポジトリからローカライズの作業をしていたので日本語差分を用意しました。(実は今日になって9.0の差分がどかっと落ちてきたので焦っていたのですが、ヘッダにWTL Teamが追加され、少々の修正があった程度でした。)
解凍したWTL9.0と同じディレクトリに解凍して下さい。
日本語文章の選定はVisual Studio 2010をベースに、存在しない単語や文章はMicrosoftのサイト等に掲載されているものを採用して構成しています。
なお、Web Viewに置いてこのサイトのディレクトリが設定されています。気に入らない方は変更してください。特に構わないという方は訪れてサイト維持に貢献して下されば幸いです。今後の執筆の励みにもなります。
インストーラーは無いので適当な場所へ解凍します。エクスプローラの圧縮フォルダから解凍するとウィザードの実行時にスクリプトエラーが発生する場合があるので前もってアクセスブロックを解除しておきます。
手順を明確化するために仮想PCに新しい環境を構築していますが、ここでは以下の場所に解凍しました。
Visual Studio 2010にWTLのウィザードをインストールするために、AppWizフォルダにあるsetup100x.js(x付はExpress版)を実行します。
WTL 9.0では外部ATLのバージョン違いによる不都合が修正されました。
実はこのセットアップはWindows Server 2003 SP1 Platform SDKでATLを都合することが前提となっているためATL3.0を使用するように設定されるわけですが、今回はDDK付属のATL7.1が使用できます。その為少々変更が必要になります。
AppWiz/Files/Templates/1033/stdafx.hを画像の通りに変更しましょう。
この他、非ExpressのWTLウィザードで作成されたソースに関しても
#pragma comment(lib, “atlthunk.lib")
のコードを挿入する必要があります。(リンカーのオプションで指定しても構いません)
確認のためにウィザードから単純なフレームワークを作りビルドしてみます。
過程をスライドライクに画像にしてみました。ポップアップのタイトルに説明を入れてあります。
ビルド時に" warning LNK4254: セクション 'ATL’ (50000040) は '.rdata’ (40000040) に異なる属性を伴ってマージされています"というワーニングがオブジェクト毎に起こります。これはライブラリ作成時のポリシーの違いによるもので、フラグの説明はここを参照してください。これが原因で起こる不都合は恐らく無いと考えます。
リソースエディタの入手
EXPRESSバージョンには古来からリソースエディタが付属しません。
よって外部のリソースエディタを入手して使用することになります。
ここでは以下のものを使用させていただく事にしました。
ResEdit – 窓の杜ライブラリhttp://www.forest.impress.co.jp/library/software/resedit/
ライブラリのパスを設定する必要があるので以下の通りに設定。
これでWTLのウィザードが作成したリソースも編集することが出来ます。
Visual C++ 2010 Expressはデフォルトでは基本設定が適用されているので、上級者用に切り替えて外部ツールを使えるようにします。これもスライドショーでどうぞ。
これでVisual C++ 2010 ExpressにMFC、ATL、WTL、DirectX SDK(legacy)、リソースエディタが加わり、テクニカルなVC++アプリが作成可能となります。
ユーザープロパティシートの編集
日常的にWTLとWDKに入っているような外部ATL等のライブラリを使いたい場合、いちいちプロジェクト毎にディレクトリ設定をするのは非常に面倒です。
Visual Studio 2010のシリーズからはVCディレクトリの編集は非推奨となり、ユーザープロパティシートを編集せよとの事です。
ここで[?]をクリックして詳細を確認しようとする訳ですが、ジャンプ先では適切な説明がなされていません。よってここで解説する事にします。
リソースエディタのステップで行った上級者用の設定が有効な状態で、表示メニューのプロパティマネージャをクリックします。
すると、現在作業中のプロジェクトのMicrosoft.Cpp.Win32.user等のユーザープロパティを編集する事が出来ます。各プロパティの設定はプロジェクト毎に行える設定と同様の物ですが、ここで設定する物はユーザー用のデフォルト設定となります。
今回の設定例は以下の通りです。
インクルードディレクトリ設定にATLとWTLのディレクトリを追加。
最後に外部ATLのリンク時に出るワーニングの抑制のためにリンカーオプションに"/ignore:4254 /ignore:4078″を設定します。
これは飽くまで一例ですので、各自の都合のいいように設定しましょう。
なおリボンUIをコンパイルしたい場合はプロジェクトのプロパティから、プラットフォームツールセットにWindows7.1SDKを使用する設定をして下さい。これはユーザープロパティシートでは設定できないためプロジェクト毎に設定する必要があります。
64ビットコンパイル環境を整備する
Visual Studio 2010 SP1の適用を行った時点でExpressやProfessionalのバージョンでは64ビットの環境が消されてしまうという不具合がありました。Expressでは通例通りx64環境は提供されないわけですが、これを解消する事により64ビットのコンパイル環境を追加する事が出来ます。
ただし復活するのはコンパイル環境だけで、Windows SDK 7.0ベースの付属ライブラリが手に入る訳ではありません。よって64ビットを含めたコンパイルは別途入手したWindows SDK 7.1で行います。
まずは公式サイトからコンパイラ更新プログラムをダウンロードして実行しましょう。
規約に同意し、インストールを完了して下さい。
では構成マネージャーでx64環境を追加してみたいと思います。
まずはユーザープロパティシートの編集の最後で行った様に、プラットフォームツールセットをWindows SDK 7.1に設定して下さい。これがx64プロジェクトのベースとなります。あとは画像の通りに進めて下さい。
これでプロパティマネージャに以下のようにx64環境が追加されますが、ユーザープロパティシートが見当たりませんが、これは単なる不具合です。
プロジェクトを保存し、ソリューションを閉じて読み込み直してください。
→
あとはWin32の設定で行った様にユーザープロパティシートの設定を行っていきます。
当然ですがライブラリディレクトリは64ビットの物を設定して下さい。
このままでは、x64には存在しないolepro32.libライブラリをリンクしようとしてエラーが起こるので「特定の規定ライブラリの無視」を設定します。
あとはコンパイルを実行すればx64実行ファイルが出来上がります。
しかし、この状態では32bitと64bitの出力ディレクトリが一緒になってしまっていて、原因はDebug | Win32、Debug | x64、Release | Win32、Release | x64の共通プロパティのルートの設定にあります。
Win32の設定が
出力ディレクトリ:$(solutionDir)$Configration)\
中間ディレクトリ:$(Configuration)\
対して、x64の設定が
出力ディレクトリ:$(solutionDir)$(Platform)\$Configration)\
中間ディレクトリ:$(Platform)\$(Configuration)\
x64のビルドディレクトリはx64\Debug( or Release)以下に出力されるようになります。Win32の方はこのままだとDebug以下になりますが、同様の設定にすればWin32\Debug(or Release)以下に出力されるようになります。
では次回、Visual Studio 2013 Express for Windows Desktopのバージョンの記事をご期待ください。
ディスカッション
コメント一覧
何をしていいのかわからず右往左往していましたが、おかげ様スタート地点に立てそうです。ありがとうございます。
わかりやすい!
文字だけだといまいちイメージがつかめなくて。。。
これでリソースもいじれるんですね
リソースエディタについて
http://www.resedit.net/からDLしたものは中身がexe形式のインストーラになっており
オンラインからHao123などのインストールを勧める物になっています。
不要なものをインストールしないようにもできますが、
安全のためには窓の杜などからDLしたほうがよさそうです。
私が窓の杜からDLしたものについて、ResEdit本体はバイナリ比較で同一のものと確認しました。
リンクを作者のサイトから窓の杜のアーカイブへ変更し、記事に一文を追加しました。以前は作者のサイトで7z形式かインストーラーをzip圧縮した形式を選べましたが、インストーラーのみの配布になり、インストーラーにはアドウェアが含まれれるようになった事を確認しました。こうなるに至った経緯を利用者側も考える必要があると思います。
どちらに書き込んでいいのかわからなかったため、最新記事のほうにて失礼いたします。
ROをプレイするにあたり、RCX時代から作者様にはずっとお世話になっております。
M2Eの素晴らしい使用感のためにSimpleROHookになってからもずっと使用させていただいてきたのですが、先日OSの再インストールを余儀なくされたため、SimpleROHookのデータを紛失してしまいました。
OSの再インストール後、改めてSimpleROHookをダウンロードさせていただこうと思ってHPを覗かせていただいたのですが、RCX跡地ページのほうのダウンロード箇所を見てもそれらしいものが見つけられませんでした。
現在はダウンロードはできないのでしょうか?ダウンロードできるようでしたら、お手数なのですがその箇所を教えていただきたいです。自分でプログラムを作れないのがいけないのですが、M2Eをどうしても使用したいため、どうぞよろしくお願いいたします。
ピンバック & トラックバック一覧
[…] 日本語差分は下記にて。 http://lab.planetleaf.com/ […]