header
topic1 topic2

2012.07.22

ATSプラグインのビルドとエラー (VC++ 2010)

こんばんは。
公式サイトのATSプラグインのサンプルをビルドするとVisual Studio 2010でエラーが出るというのが気になっていたので、
今回はそれについて触れていきます。

◆ 開発環境のインストール

まずは上に挙げた状態を再現するために、Visual Studio 2010の開発環境を用意します。
開発環境はC++ Express版が Microsoftのサイト で無償で提供されています。

なお、今回はProfessional版でテストしましたが、Express版とほぼ同じと思われます。
インストールが完全に終わるまで、およそ1時間半〜2時間かかります。

◆ プロジェクトの変換をする

インストールが終わったら、ATSプラグインのサンプルのプロジェクトを開いてみます。
ATSプラグインのサンプルは Bve trainsim 公式サイト から入手しましょう。

ダウンロードしたサンプルのプロジェクトファイルを開くと、まず初めに「変換ウィザード」が開きます。
ウィザードにしたがって進めていくと、プロジェクトを正常に変換できました。

◆ ビルドするとエラーが出る

ビルドメニューからビルドを選択すると、出力ウィンドウにエラーが出ました。

内容は「文字列"Initialize"にマッチする関数がいろいろあるよ」ってことみたいで、
警告やエラー LNK4022, LNK4002, LNK2001, LNK1120 が出ています。

ソリューションエクスプローラにある「外部依存関係」というのが気になります。
どうやらVisual Studio 2010から新たに追加されたもののよう。

恐らくこの中にあるファイルのどこかで、同名の "Initialize" 関数が存在することで、
Ats.dll のビルドに影響している感じがします。

Initialize関数のみ、名前が干渉してしまっているためにビルドエラーになるようなので、
それを回避する方法を考えます。

1つの方法は干渉する関数名自体を変えてビルドすることですが、
BVE本体から "Initialize" は必ず参照されるもので名前を変えることができません。

◆ ランタイムライブラリの設定を変えてみる

プロジェクトのプロパティから「構成プロパティ -> C/C++ -> コード生成 -> ランタイム ライブラリ」を見てみます。

ここでランタイムの設定、マルチスレッド (/MT), マルチスレッド デバッグ (/MTd) や
マルチスレッド DLL (/MD), マルチスレッド デバッグ DLL (/MDd) が選択できるようになっています。
デフォルトでは、 マルチスレッド デバッグ (/MTd) が選択されています。

前者の2つでは、上のようなビルドエラーが出る構成でリンクされるようです。
マルチスレッド DLL を選択すれば、エラーのない構成でビルドできます。

しかしこの場合は注意する点があります。
オプション /MD, /MDb 指定の場合は実行環境でもランタイムライブラリのインストールが必須になります。
つまり、ユーザーに別のライブラリのインストールを促す必要があります。

Visual Studioのインストールされているマシンでは、ランタイムライブラリが入っていますので
何もエラーが出ませんが、別のマシンでは実行時エラーが出るようです。

◆ 今のところ

ATSプラグインを制作するのであれば2008以前のバージョンがよい感じがします。
2010が悪いわけではないのですが、ビルド構成の考え方では2008以前のほうが簡単です。

ちなみに当方は2008の環境ですので、追加で必要になるものとかはありません。

2010で制作した場合、ランタイムライブラリのインストールを忘れないようにする必要があります。
主に制作関係の方が、ATSプラグインの配布時にしっかり記載しておけばよいものです。
ちなみに、開発環境のService Packによって指定されるランタイムも異なるようです。

2012のRC版でもテストしたいと思いましたが、あまりに時間が掛かるのでやりません。

簡単なATSで開発環境にこだわらないのであれば、gccなんかでコンパイルするのもいいのではないでしょうか。

◆ 関連するURL

/MD、/MT、/LD (ランタイム ライブラリの使用) - MSDN

Microsoft Visual C++ 2010 再頒布可能パッケージ (x86)
Microsoft Visual C++ 2010 再頒布可能パッケージ (x64)
Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86)
Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x64)

◆ ほかのこと

ほかのことも手をつけていきたい...

2012.07.15

TIMS装置の細かい表示を作る

こんにちは。
今回はATSプラグインによる車両のTIMS装置の再現についてです。

少し前に更新された Kazumaさん の制作された209系に便乗して、TIMS装置に関連した表示を作ってみることにしました。
いつものことながら、今回もいろいろなテストを兼ねています。

◆ TIMSモニタの大まかな構成

列車種別・列車番号をはじめ、駅名表示や着発時刻を表示することが前提になります。
また、到着番線や制限速度、徐行区間を表示する場合もあるようなのでそれも組み立てていきます。

上に挙げた各情報は地上子から入力することとします。
そうすることで、同じATSプラグインを持つ車両は差し替えが可能になります。

駅名と時刻が表示される部分は次駅停車の判定で更新され、1行ずつラグを持って更新されます。(プッシュアップ)
ふつう、制作するときはプログラミングの手間を考えて1フレームで全ての状態を更新するところですが、
今回はあえてTIMSっぽい感じを出すために、その辺りもタイマーで更新するようにしました。

大まかな構成はこんな感じになりました。

◆ 実際に動作させてみる

実際に動かしてみるとそれなりにTIMSの存在感をアップさせることができました。

モニタ更新のプッシュアップは150msごとに「1行消す」「新しい状態を表示」を繰り返しています。
これで、プッシュアップのタイムラグのようなものを再現することができました。

表示更新のイメージが画像だと伝わらないので。
画質の関係でよく見えませんが... \アッカリーン/

◆ 機能の応用など

今回制作したTIMSモニタとその機能は、今後の制作に活用する予定です。
ATS-SNとATS-Pがベースになっていますので、SNまたはPの路線であれば応用が可能だと思います。

TIMS装置自体も駅名表示5行(段)まで対応していますので、E233系のような横方向にスライドするタイプや
E331系のAIMS(4行表示)にも応用が利く構成になっています。

◆ 謝辞

TIMSモニタの画像や情報提供など、Kazumaさんにご協力いただきました。
また、テストにあたり同氏の車両データとmackoy氏の路線データをお借りしています。
ありがとうございます。

この記事には制作中の内容が含まれています、実際の動作と違う部分があります。

2012.06.26

Bve5のマップファイル制作「エディタについて考える」

長いので別ページにまとめました。

 続きを読む...

2012.06.21

「東急目黒線用 TASCプラグイン」を更新しました

東急目黒線で使用しているTASCプラグインの更新版です。
回生開放の関連機能と一部の表示灯について、設定を更新しています。
この更新は任意です、更新を適用しなくても問題ありません。

新しいファイルをダウンロードして車両ファイルのATSプラグインと置き換えます。
更新ファイル: tascrel_120621.zip

参考: 関連ディレクトリ
C:\Program Files\mackoy\BVE4\Train\trta9000_6r\files\Ats.dll
C:\Program Files\mackoy\BVE4\Train\tkk5080\files\Ats.dll

TASCについては更新していませんので、変わった点はありません。
少しずつ手を付けていますが、なかなか更新するタイミングがなく…。

◆ サイトデザインを一新しました

以前のデザインではテキスト部分の幅が狭かったため、「長文を書くのに向いてないなぁ」とつくづく感じていました。
デザインはあまり手つかずでしたが、せっかくなのでしっかりしたものに書きなおすことにしたのです。

最近になって作業環境がMacBookProに変わったのですが、その影響を大いに受けたデザインに落ち着きました。
何より長文が書きやすい&読みやすいうえ、画像も大きく貼り付けられそうです。

制作モノに関しては、だんだんと進めていければと思います。

About this page

民鉄のATSシリーズ

民鉄じゃないATSシリーズ

プロフィール

Unicorn(ゆにこーん)といいます。
信号に関係するもの、保安装置について制作をしています。

リンク用のバナーは こちら をご利用ください。
個人的な連絡は dev(a)unic.vc へ。