CvGameCoreDLL.dllの作り方

MOD/作成情報/CvGameCoreDLL.dllの作り方
Last-modified: 2013-02-09 12:01:35

MOD/作成情報/CvGameCoreDLL.dllの作り方 †

概要 †

Visual C++ 2008 Express Editionを使ってCvGameCoreDLL.dllを作る方法を説明します。Civ4 BtS3.19 日本語版を使用。

参考URL †

第9回CivilizationIVMOD解説講座‐ニコニコ動画(ββ)
この文書はほぼこの動画をテキスト化したものです。動画の作者の人ありがとう。
第10回CivilizationIVMOD解説講座‐ニコニコ動画(ββ)
BtS 3.13 用SDKの入手法
Installing and using the SDK - Civilization Fanatics' Forums
Civfanaticsのスレッド
Civilization Fanatics' Forums - Downloads Database - Makefile/Instructions BTS 3.17 SDK / Debugging
Visual C++ 2008でSDKを開発する方法の解説。このページを書いてから存在に気付いたぜ……

Visual C++ 2008 Express Edition のインストール †

WS000000.png

上記URLからダウンロードしてセットアップを実行。

(重要)Visual C++ Toolkit 2003 のインストール †

コンパイラ本体はこれを使います。同じVC系列でもこれ以外だと色々面倒が起きそうです。

マルチスレッドライブラリのダウンロード †

C:/Program Files/Microsoft Visual C++ Toolkit 2003/lib に上記の3ファイルを置く。

Microsoft R Windows Server 2003 R2 Platform SDK のインストール †

注:現在、既に配布を終了している様子で上記はリンク切れですが、Visual C++ 2008 Express Editionに付属しているSDKで代用できるようです。
   こちらはC:/Program Files/Microsoft SDKs/Windows/v6.0Aあたりにインストールされています。

SDKとmakefileの入手 †

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

WS000001.png

ページ下部の「Download GNU tarball」からダウンロードして解凍。

プロジェクトの作成 †

Visual C++ 2008 を起動してプロジェクトを新規作成。

WS000002.png

左ツリー「プロジェクトの種類」の「全般」を選択、画面右テンプレートで「メイクファイル プロジェクト」を選択。画面下のプロジェクト名と保存場所は適宜。「ソリューションのディレクトリを作成」はとりあえずオフに。

WS000003.png

ウィザードで設定。

ビルドコマンドライン
nmake Debug
消去コマンド
nmake clean_Debug
WS000005.png
デバック構成と同じ
off
ビルドコマンドライン
nmake Final_Release
消去コマンド
nmake clean_Final_Release
WS000004.png

入力後「完了」で設定終了。

ダウンロードしたSDKのファイルをすべてプロジェクトのフォルダにコピー
パッチ付属のSDKを使う場合は、CvGameCoreDLL.vcprojを除いたファイルをコピー

WS000007.png

ビルド †

ビルドの対象をReleaseにして

WS000008.png

開始!

WS000012.png

文字化けでエラー。CvGameTextMgr.cpp 2092行をとりあえずコメントアウトして凌ぐ。

WS000010.png

再びビルドして無事成功。[プロジェクトフォルダ]/Final_Release/CvGameCoreDLL.dll が目的のdllです。MODS/[MOD名]/Assets に置けばOK。

動作確認 †

CvUnit::canMove() で常に true を返すようにしてみる。

WS000013.png

できた CvGameCoreDLL.dll を My Documents/My Games/Beyond the Sword(J)/MODS/DllTest/Assets にコピーして civilization を起動、MOD DllTest をロード。

WS000014.jpg

いくらでも移動できるようになりました。作成した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)っていらなくね? 中身見た限りでは、実行とは関係ないコメント文を埋め込んでるだけっぽいが。

うちでは、無くても問題なく動作してるよ。