Visual C++ 2008 Express Editionを使ってCvGameCoreDLL.dllを作る方法を説明します。Civ4 BtS3.19 日本語版を使用。
上記URLからダウンロードしてセットアップを実行。
コンパイラ本体はこれを使います。同じVC系列でもこれ以外だと色々面倒が起きそうです。
C:/Program Files/Microsoft Visual C++ Toolkit 2003/lib に上記の3ファイルを置く。
注:現在、既に配布を終了している様子で上記はリンク切れですが、Visual C++ 2008 Express Editionに付属しているSDKで代用できるようです。
こちらはC:/Program Files/Microsoft SDKs/Windows/v6.0Aあたりにインストールされています。
BtS3.19日本語版ではパッチを当てたときにSDKが自動でインストールされています。Beyond the Sword(J)/CvGameCoreDLLがSDKなので、まずはこれを適当な位置にコピーしてきましょう。
この中にはVisualStudioのプロジェクトファイルも含まれていますが、これをそのまま使っても上手く行かないという報告が多いので有志が作ってくれたmakefileを使います。
これをCvGameCoreDLL直下に放り込んでください。
TOOLKIT=C:/Program Files (x86)/Microsoft Visual C++ Toolkit 2003
PSDK=C:/Program Files/Microsoft SDKs/Windows/v6.0A
のパスは自分の環境に合わせて変更します。
また、日本語版に固有のコードをコンパイルするためにmakefile中の
Debug_GLOBAL_CFLAGS=
Final_Release_GLOBAL_CFLAGS=
を
Debug_GLOBAL_CFLAGS= /DCYBERFRONT
Final_Release_GLOBAL_CFLAGS= /DCYBERFRONT
のように変更します。
CvGameCoreDLL.dllのソースコードとビルドに必要なライブラリがSDKとしてBtS英語版には同梱されています。しかし日本語版には含まれていないので、どこからか探してくる必要があります。今回はCiv4:BTS Unofficial Patchのリポジトリに入っている修正前のSDKを使います。
http://civ4btspatch.svn.sourceforge.net/viewvc/civ4btspatch/CvGameCoreDLL/trunk/?pathrev=2
ページ下部の「Download GNU tarball」からダウンロードして解凍。
Visual C++ 2008 を起動してプロジェクトを新規作成。
左ツリー「プロジェクトの種類」の「全般」を選択、画面右テンプレートで「メイクファイル プロジェクト」を選択。画面下のプロジェクト名と保存場所は適宜。「ソリューションのディレクトリを作成」はとりあえずオフに。
ウィザードで設定。
入力後「完了」で設定終了。
ダウンロードしたSDKのファイルをすべてプロジェクトのフォルダにコピー
パッチ付属のSDKを使う場合は、CvGameCoreDLL.vcprojを除いたファイルをコピー
ビルドの対象をReleaseにして
開始!
文字化けでエラー。CvGameTextMgr.cpp 2092行をとりあえずコメントアウトして凌ぐ。
再びビルドして無事成功。[プロジェクトフォルダ]/Final_Release/CvGameCoreDLL.dll が目的のdllです。MODS/[MOD名]/Assets に置けばOK。
CvUnit::canMove() で常に true を返すようにしてみる。
できた CvGameCoreDLL.dll を My Documents/My Games/Beyond the Sword(J)/MODS/DllTest/Assets にコピーして civilization を起動、MOD DllTest をロード。
いくらでも移動できるようになりました。作成したdllが働いていることが分かります。
Civilization4(civ4) MODスレ Vol.31
928 : 名無しさんの野望[sage] :投稿日:2012/09/29 15:31:40 ID:13vdF90x [1/3回] 新PCにSDK環境構築しようとしたら、 Microsoft Windows Server 2003 R2 Platform SDKが 今はMicrosoft公式からは落とせなくなったっぽいのな。
CNET downloadから落としたけど、地味に厄介だ。
929 : 名無しさんの野望[sage] :投稿日:2012/09/29 17:31:36 ID:wbq+otLt [1/2回]
928 Windows7にしとけ。
930 : 名無しさんの野望[sage] :投稿日:2012/09/29 18:08:16 ID:13vdF90x [2/3回]
929
Windows7にしとけ。 あれ、もしかして最新の Microsoft Windows SDK for Windows 7 and .NET Framework 4 で代用が効くのか? Windows SDK世代じゃなくて、Platform SDK世代のSDKが必要なんだーってことで wikiとかCivfanであえてこっちが指定されてるんだと思ってたけども。
931 : 名無しさんの野望[sage] :投稿日:2012/09/29 18:35:36 ID:wbq+otLt [2/2回]
930 記事が書かれた時代にWindows7なんか存在しないし。
余談だが、Makefileはこれが超おすすめ。早くて死ぬ。 http://forums.civfanatics.com/showthread.php?t=370861
932 : 名無しさんの野望[sage] :投稿日:2012/09/29 19:33:55 ID:13vdF90x [3/3回]
931
記事が書かれた時代にWindows7なんか存在しないし。 いやcivfanのVC++使う方の元記事って、Vistaは出てるタイミングなはずなんだけど、 Windows SDK for Vistaは出た直後過ぎてスルーされたってことなんだろうな。
2008じゃなくてVC++2010でいいみたいだし、そのMakefileも興味深いし、 ちょっと色々やってみるわ。ありがとう。
933 : 名無しさんの野望[sage] :投稿日:2012/09/29 21:36:56 ID:e91T0OyO [1/1回] 新しい知識があるならwikiをアップデートしておいてくれよ
934 : 名無しさんの野望[sage] :投稿日:2012/09/29 22:00:07 ID:ZnOFjwe2 [1/1回] 今はVC++2012があるしSDKもWin8が最新なんだけどこれでもいけるかな
935 : 名無しさんの野望[sage] :投稿日:2012/09/30 20:21:16 ID:6ZtCQ7G9 [1/1回] いまMarsnow!やってんだけど属国が無いせいでグダる テクノロジーinfoあたりに文章加えることで属国を加えることができるなら どなたかやり方を教えたください パッチEで日本語化してます。
936 : 名無しさんの野望[sage] :投稿日:2012/09/30 20:50:51 ID:xF9DIjUW [1/1回]
934 試してみたけど地味に面倒。
931で教えてもらったMakefileつかって とりあえずVC++2010と同梱のWindows SDK v7.0a でコンパイルしてみたら、 CvGameCoreDLL.rc内でincludeしてる"afxres.h"が見つからなくてエラーが起きる。
#Microsoft Windows Server 2003 R2 Platform SDKには含まれてる。
#あとVC++Expressじゃなくて、製品版のprofessionalには含まれてるみたい。 ぐぐったりcivfan見たりした所、CvGameCoreDLL.rcの中の"afxres.h"を"windows.h"に置換してしまえばいいらしい。 VC++2010+同梱Windows SDK v7.0aの場合はここの変更さえすればコンパイル通った。
で、VC++2010+Windows SDK for Windows 8 の場合は、前述のCvGameCoreDLL.rcの変更に加えて、 Windows SDKのフォルダ構造が若干変わってるんで、>>931のMakefileの
RC="$(PSDK)\\bin\\rc.exe" って行を、環境に合わせて書き換えてやる必要があるようだ。
VC++2012+Windows SDK for Windows 8 だと、VC++2012で普通に新規のメイクファイルプロジェクト作って、 wikiの手順通りにデバッグ構成とかを設定してもまともにコンパイルが通らなかった。 ただ、>>931のところで配ってるVC2010用プロジェクトファイルで置き換えてやったら、 VC++2012上で"VC++2010プロジェクト"って認識されるようになって、 後はVC++2010+SDKWin8のときと同じようにすれば、ちゃんとコンパイルが通るようになる。
まとめると、VC++2010をインストールすればWinsows SDKはそれに同梱のでおkだし、 rcファイルちょっと書き換えるだけなんで、一番楽って結論になった。 VC++2012でコンパイルしようとするのは止めといたほうが無難。
937 : 名無しさんの野望[sage] :投稿日:2012/10/01 10:36:21 ID:DokeWsa8 [1/1回]
936 リソースファイル(*.rc)っていらなくね? 中身見た限りでは、実行とは関係ないコメント文を埋め込んでるだけっぽいが。
うちでは、無くても問題なく動作してるよ。