Delphi 64bitで実現した大規模VR空間対応の新バージョン『UC-win/Road Ver.12』開発の道のり
第34回 エンバカデロ・デベロッパーキャンプ

株式会社フォーラムエイト
本社開発マネージャ／執行役員
高田 寿久

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

フォーラムエイト会社紹介
 FORUM８ Company Profile

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

FORUM 8 Company profile

株式会社フォーラムエイト（FORUM8. Co., Ltd）
設立
：1987年5月 資 本 金 ： 5,000万円
登録： 建設コンサルタント
事業内容 ： 設計支援ソフトウェアの開発／販売／サポート
各種ソリューション提供
従業員数 ： 239名（2017.1.1現在）◎ 土木設計支援パッケージソフト開発販売で創業、UC-1は、1981年発売開始◎ 登録ユーザ数18,860（2016.9.20現在）、土木設計ソフトで、トップクラスのシェア◎ ユーザ内訳：建設コンサル60％、官公庁、大学、建設、自動車、各種研究機関◎工学博士6名、技術士5名（建設/情報部門）、ソフト開発・応用情報・基本情報技術者51名◎事業所：国内9・海外4で営業展開、ソフト海外輸出・大型プロジェクト受注◎100%出資（ 国内：CRAVA／ファーストシステム／FORUM8沖縄
海外：上海富朗巴／青島軟件技術／台湾富朗巴／FORUM8ベトナム)◎2014年28期は、売上37.1億（53.4%売上増、過去最高）、経常益5.75億、2016年9月期は増収増益◎認証登録：ISMS、Pマーク、QMS(ISO9001）、BCMS（BCP）、EMS（ISO14001)を全社で取得
PSQ認証制度取得（UC-win/Road Ver.12）◎基本特許取得：データ伝送技術「a3S クラウド伝送ライブラリ」／クラウド管理システム®
VR-Cloud 運転シミュレーション／クラウドコンピューティングのアーキテクチャ 他
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

3

FORUM 8 OFFICE & BRANCH

SapporoKanazawa
Fukuoka

Kobe

Miyazaki

岩手Lab

Sendai

Nagoya Tokyo
OsakaCRAVA2016.6 ベトナム事務所開設
2017
ミャンマー事務所開設

ファーストシステム

FORUM8 Okinawa

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

2014.1
青島軟件技術開設

上海富朗巴2014.8
台湾富朗巴開設
4

FORUM 8
VRデータサービス

Solutions
システムインテグレー
ター

カスタマイズ開発

3DVRエンジニアリング
サービス

VR

Simulation

解析支援サービス

FEM

Analysis

DESIGN

BIM・CIM・CAD

ES/F3D/地盤

スパコンクラウド®

Web ウルトラマイクロ
SaaS

データセンター

建設コンサルタント

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

5

フォーラムエイト設立
30周年記念社史本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

12

U-22プログラミング・コンテスト2017～夢を動かせ。自由な創造力で未来をつかめ。～
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

13

スポンサー企業賞賞名副賞

サイボウズ賞

ラズベリーパイ kit 5セット

Cygames賞

MacBook Pro Retina + マウス・キーボードセット
他

OBC賞（オービックビジネスコンサルタント）

SURFACE PRO 4

さくらインターネット賞

Happy Hacking Keyboard

useful賞（日本事務器）乞うご期待！

（最新IT関連グッズを予定）

PCA Dream21賞（ピー・シー・エー）

最新版MacBook

フォーラムエイト賞

オリジナル図書カード3万円分＋タブレットPC

豆蔵ホールディングス賞

賞金10万円本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

14

U-22プログラミング・コンテスト2017
ハンズオンセミナー

FORUM 8 Design Solution
VR／FEM／CAD／Web
3D Engineering-Services

U-22プログラミング・コンテスト実行委員会
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

15

U-22プログラミング・コンテスト2017
ハンズオンセミナー
1. U-22プログラミング・コンテスト2017のご紹介

2. 第１部

Delphi プログラミング入門（休憩）3. 第２部

 3DVRソフトウェア UC-win/Road のご紹介
 3次元空間の作成、編集、操作、シミュレーション
 UC-win/Road SDK プログラミング入門•
・サンプルプラグインの ご紹介•
・サンプルプラグインの 例•
・サンプルプラグインの 改造•••

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

16

3次元バーチャルリアリティソフトUC-win/Road紹介
 3D virtual reality software UC-win/Road

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

UC-win/Roadとは3次元リアルタイム・バーチャルリアリティソフトUC-win/Roadは、3次元大規模空間を簡単なPC操作で作成でき、多様なリアルタイム・シミュレーションが行える先進のソフトウェアです。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

19

UC-win/Roadの製品構成
製品名

製品構成

Standard

最も標準的な製品。地形の生成や道路、交差点の作成、交通流の生成、ドライビングシミュレーション、環境の変化など基本的なデータ作成、シミュレーションが可能。但しプラグインオプションは含まないため、シナリオ作成機能やマイクロシミュレーションプレーヤー等の機能を用いることはできない。

AdvancedStandardの機能と合わせ、シナリオ作成機能や点群モデリングプラグイン、騒音シミュレーションプラグインなど多くのプラグインが使用可能になる。

Ultimate

最上位製品。別売の有償オプションを除く、全てのプラグインが使用可能。

Driving Sim

ドライビングシミュレーションに関する機能を強化した製品で、実車型のドライブシミュレータのハードウェアとの連携や、車両運動シミュレータCarSimとの連携，フォースフィードバック機能を搭載したステアリングコントローラSENSO-Wheel によるドライビング、ECOドライブなどが可能。

Presentation Version

プレゼンテーション専用の製品。データの作成、編集ができないが、データの閲覧、道路走行、スクリプト（プレゼンテーション）実行、シナリオ実行が可能。

Cluster Client Version

クラスターシステム（多画面表示を行うとき表示専用PCを用意することにより負荷分散するシステム）の表示専用PCに用いる製品。

Multi User Client Version

表示専用の Cluster Client Version に運転などのシミュレーション機能を追加した製品．

Trial Version

データの作成・編集やプレゼンテーション機能などの各種操作が体験可能。但しデータの保存を行うことができない。また、読み込み可能なデータは、体験版専用のサンプルデータに限定される。

Free Viewer

無料ビューア。無料ビューア出力プラグイン（有償）で出力されたファイルのみ閲覧できる。視点移動，スクリプト再生のみ可能．
走行不可．

※対応言語 ： 日本語、英語、中国語（簡体字／繁体字）、韓国語、イタリア語、ドイツ語、フランス語（予定）※日本語、英語以外の言語は翻訳に時間を要すため、最新版では対応できていないものもあります。
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

20

UC-win/Roadの標準機能

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

21

地形生成

地形とは初期状態では広大な3次元空間が広がっているだけ。この空間に地形を生成し、地形の上に道路を作成したりビルを配置したりする。

地形データ

一定の間隔で区切られた格子点の標高を与えたデータを読み込み、格点をつなげて地形を構成する。一般に、数値標高モデル（DEM：DigitalElevation Model）やDTMと呼ばれる。格子の大きさによって、50mメッシュや１秒メッシュ（緯度経度の度分秒であらわしたもの。１秒＝約30m）と呼び、格子が小さくなるほど精度が高い。
各格子点の標高は生成後に調整可能。
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

22

標準地形データ
国土地理院承認（平12総使、第173号）の元、下記のデータを標準搭載。これにより、日本全国のあらゆる地域の地形データを生成可能。
50mメッシュ標高（全国）日本全国（19測地座標系）のデータを収納。

ニュージーランド

50mメッシュ標高データ

中国

CGIAR-CSI SRTM 90mメッシュ

オーストラリアCGIAR-CSI SRTM 90mメッシュ

その他の諸国FORUM8へ問合せすることにより提供可能なデー
タもある。
※米国、欧州の一部、南アメリカ等※標準地形データは右のフォルダに格納して製品を起動して使用します。製品のDVDに収録されており、DVDからインストールすると自動的に格納されますが、エクスプローラでコピーすることも可能です。
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

23

地形パッチ

地形パッチとは、標準地形よりも精細な地形を生成するための機能で、標準地形を新しい地形形状で置き換えたり、合成することができる。主な用途は以下の通り。
1．任意地形のインポート
XML形式のオープンフォーマットのテキストファイルを作成することにより、任意の地形データをインポートすることができる。

２．標準地形データの調整

標準の地形データの一部を地形パッチにコンバートすることにより、任意の座標を追加するなど様々な修正が可能になる。

３．外部地形データのインポート

国土地理院の数値地図5mメッシュ(標高)やLandXML、ShapeFile、IFC、12d Model等の外部ソフトウェアの地形データは地形パッチとしてインポートする（標準地形データを置き換える）。

４．外部ソフトウェアとの連携

Autodesk Civil 3Dとの連携において、Civil 3Dからの地形データの取り込みは地形パッチとして生成する。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

24

座標系
平面直角座標系

日本国内を測量するための座標系。日本全国を19の座標系に区分し、それぞれの原点からの相対座標で表す（X座標が南北、Y座標が東西） 。東京は第9座標系。
なお、2002年の測量法の改正前と後で値が異なる。改正前を(旧)日本測地系（TKY座標）、改正後を世界測地系（X-Y座標）と呼ぶ。

ローカル座標系

地形を上から見たとき、左下を原点（0, 0）としたときの座標系（X座標が東西、Y座標が南北）

緯度経度

UC-win/Roadでは、緯度経度を使って建物の配置等が可能。
DMS： 度°分’秒“ (Degrees Minutes Seconds)
DD ： ##.######で表す（Decimal Degree）

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

25

ストリートマップ

UC-win/Roadでは航空写真や数値地図をストリートマップとして取り込んで利用可能。
デジタルオルソ画像

航空機や人工衛星で撮影された地表画像の歪みを取り除いく補正（オルソ補正）された画像。一般にBMP形式やJPEG、TIFF形式で提供される。

数値地図2500m（空間データ基盤）

国土地理院の「独自形式・世界測地系版／日本測地系版」に対応。東京（Tokyo.map）、大阪（Osaka.map）は製品に標準で同梱。

細密数値情報（10mメッシュ土地利用）

国土地理院発行の日本地図センターが販売するデータ。数値地図5000（土地利用）は未対応。

国土交通省DMデータ

数値地形図データとして整備されたもののうち、旧拡張DM形式の読み込みに対応。3次元情報は部分的に対応（地形パッチとして読み込む）。

ワールドファイル（WorldFile）

画像ファイルの位置情報や大きさ等が記録されたファイル。座標指定しなくても読み込み、配置できる。

※国土地理院の最新の空間データ基盤（*.xml）には未対応。
※参考

デジタルオルソ画像販売会社

NTT空間情報株式会社

http://www.ntt-geospace.co.jp/

アジア航測（株）

http://www.ajiko.co.jp/

中日本航空（株）

http://www.nnk.co.jp/

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

26

道路生成機能道路線形

線形（道路のルート）は、一般にIP法を用いる。直線と曲線の組み合わせにより表現し、起点（BP）、折れ点（IP）、終点（EP）で定義する。また、曲線は、徐々に曲率が変わる緩和曲線と、一定の曲率の円弧の組み合わせで構成されることが多い。

IP点（方向変化点と表現）

IP点

平面線形

道路を上から見たときの線形。道路平面図
画面で作成する（右図）。

縦断線形

道路を側面から見たときの高さ方向の線形。

ランプ

立体交差などで異なる高さの道路を接続する。
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

27

道路生成機能断面

車線数や車線幅、歩道の有無などの道路を輪切りにしたときのデータを(横)断面と呼ぶ。予め登録しておき、適用する区間を指定する。

Transition（トランシジョン）

異なる形状の断面を指定した距離で徐々に同化させる機能。擦りつけとも呼ぶ。

交差点

２本の道路が交差すると自動的に生成される。自動生成後、白線の描画や交通規則や信号制御などを設定することで現実と同じような交差点を生成できる。

Transition

その他

切り土、盛り土、トンネル、橋梁などを表現可能。また、河川についても、道路と同じ画面（道路平面図）で定義する。
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

28３Dモデル

UC-win/Roadでは、3次元空間上に配置する様々な3Dモデルのファイル形式をサポート。
FBXやMD3はアニメーションに対応しているので、キャラクタとして歩行可能。
形式
3DS

用途および特徴
多くのCGソフトで対応している形式。3D空間に配置したり、運転車両として登録し、ドライビングシミュレーションに利用できる。3Dモデル
出力プラグイン（有償オプション）を用いると、UC-win/Roadの3次元空間の地形やモデルを3DS形式で出力可能。

FBX

詳細な表現が可能．3D空間への配置のほか，スムーズなアニメーションを付けられ、歩行キャラクタなどへの利用も可能．現時点では運転車両として用いることはできない。

MD3

アニメーションが可能な形式。歩行キャラクタに利用。

COLLADA

拡張子*.dae。Google Earth等で使用されている。3D空間への配置に利用可能。

OBJ

3D空間への配置に利用可能。

新規ビル

簡易なテクスチャ付きビルモデルを生成する機能がある。

パラメトリック エスカレーターや階段などの複雑なモデルも簡易に作成することがでモデル
きる。(Ver.9より対応)
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

29

その他のモデル
他にも様々なモデルを3次元空間上に配置できる。
名称

用途および特徴

樹木

板状の画像を組み合わせて表現する2D樹木と、木の葉を1枚1枚描画する3D樹木がある。3D樹木は風で葉や枝を揺らしたり、花を描画できる．

炎/煙

指定した位置に炎や煙を配置できる。それぞれ強さや広がりなどのパラメータ設定によりリアルな表現が可能（パーティクルにより表現）。煙はトンネルや建物内の広がりをシミュレートするため煙トンネル機能がある。

3Dテキスト

予め入力した文字列を3次元空間上に表示可能。

旗

各国の旗を用意。風で揺らすことができる。

ビデオウォール

AVIやWMV、MOV、MP4などのビデオファイルをインポートし、3次元空間上で再生可能。

道路付属物

指定した道路の指定した位置にモデルを配置する機能。道路が移動しても追従させることができる。道路標識や道路面の速度表記、街路樹、街灯などに利用。

森林

指定した領域に多数の2D樹木を一度に配置する機能。3種類の樹木について，指定した各高さの範囲で，指定本数をランダムに配置する。

駐車場

駐車場モデル読み込みプラグイン（別売）により、弊社のCADシステム「UC-1駐車場作図システム」のデータを配置可能。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

2D樹木

3D樹木

旗

炎/煙

ビデオウォール

3Dテキスト道路付属物
30

気象／ライティング

時刻の変化の表現や雨、雪の表現、夜間のライティングなど環境、気象に関する様々な機能を利用可能。風向き（１方向のみ）を指定することで、雨や雪が流れる表現が可能。

雨の表現

時刻による変化

霧の表現

影の表現

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

雪の表現

街灯やヘッドライトの表現
31ドライビングシミュレーション
ドライビングシミュレーションとはコンピュータ内の車両の走行をハンドルやアクセル操作で擬似的に体験するもの。UC-win/Road内に作成した3次元空間上を自由に走行体験できる。簡易なゲームコントローラを使ったシミュレーションから、油圧式のモーションプラットフォームを用いた大型シミュレータのシミュレーションまで対応。

車両ダイナミクス

運転する車体の大きさや車重、重心位置からエンジン出力特性、トランスミッション、ブレーキ、駆動装置、サスペンション、タイヤと路面の摩擦力などの車両特性、運動特性を考慮した計算をコンピュータ内で行い、リアルにシミュレーションすることが可能。CarSim等の車両ダイナミクス計算に特化したソフトウェアとの連携にも対応。
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

32

ドライビングシミュレーション
道路ネットワークを取り込むことにより、コンピュータ上でドライビングシミュレーションを行うことが可能
•研究開発

→

大学、研究開発機関・団体、協会

•道路設計

→

道路会社、建設コンサルタント、建設会社

•展示広報

→

展示広報館、イベント用システム、道路施設

•交通安全

→

警察、教習所、各種協会団体、損保会社

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

33

UC-win/Road SDK
UC-win/Road SDKとは、UC-win/Road上で動作するプラグインを開発するためのソフトウェ
ア開発キット。Embarcadero社製のDelphi を用いて作成したプラグインをUC-win/Roadに取り込んで様々な機能を実現する。

UserPlugin1.bpl

UserPlugin2.bpl
・・・

UC-win/RoadDelphi※実装可能な機能例①道路線形や断面情報の取得②運転車両の状態のリアルタイム取得（ログ機能）③配置モデルやキャラクタ情報の取得⑤カメラ（視点）位置の制御④入力、制御画面やツールバーの追加⑥OpenGLへの自由な描画

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

・・・・
34

カスタマイズ（受託開発）

汎用性の高いシステムであることから、既存機能の拡張や新モジュールの追加による全く新しい機能まで、お客様が必要な機能を低コストで開発可能。

超大型DS（中国交通部）

次期VICS体験システム（VICSセンター）

製品展示PR用シミュレータ（AISIN）

展示会用バイクシミュレータ（東映）

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

運転設備設置位置検討システム（鉄道運輸機構）

無人化施工システム開発（土研）
35

景観ミュレーション
公園整備、住宅造成、植栽計画、緑化計画、季節や経年による景観検討や、街路再整備、駅前再開発などの都市空間における各種検討が可能。
•整備前、整備中、整備後などの変化確認•3次元による視覚的優位性により合意形成を容易にする•港湾、河川整備検討

・歴史的文化財の時代による変遷•埋没文化財の分布範囲、年代別表現

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

・日照問題の検討、照明効果の検証

36

交通シミュレーション

道路ネットワークを用いることで、時間交通量、車種別のプロファイル設定により渋滞シミュ
レーション、バイパス計画による交通量の比較シミュレーションなどが可能。
•交通渋滞対策検討•交通事故解析に関する検討•道路整備に伴う交通影響検討•商業施設等の立地に伴う交通影響検討•ワークショップなどでの合意形成

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

37

津波ミュレーション

将来発生し得る津波の陸域浸水範囲や浸水深さを解析する。
•津波波高および速度、津波到達時間の解析•津波高さ分布図の作成•構造物への波力評価•漂流物運搬の予測

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

38

施工シミュレーション

土木、建築分野での施工シミュレーションをVRで表現。建築施工、土木施工、仮設計画／
電柱地中化、歩道橋撤去などの改良工事／新工法の検討シミュレーションおよび広報用VR

掘削状況を表現

掘削と薬剤注入作業を含めたトンネル工事をシミュレーション

矢板と計画位置を表現

縦坑の支保工や壁面の仕上げをシミュレーション

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

39UC-win/Road最新機能紹介
 UC-win/Road New Features

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

UC-win/Road Ver.12
 計算周波数制御及びSILS機能
 シミュレーションリアルタイム連携プラグイン
 自動車制御の拡張
 エッジブレンディングとマスク機能
 PinPとHUDシミュレーション
 国土地理院基盤地図情報、電子国土対応
 2Dビューの拡張とシミュレーション制御

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

41

UC-win/Road 64bit対応

地形空間の拡大と分解能向上
 今後の対応：• 空間数値精度改善：広域でもミリ以下
配置モデル数の拡大の計算精度を確保
点群の読み込み可能な点数を拡大
高品質のテクスチャの使用はより楽 • 点群：表示詳細度の自動調整(LOD)に出来る
 解析結果で可視化可能なデータサイズを拡大

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

42

電子国土データ対応
 オンラインで無料提供されている国土地理院基盤地図情報、電子国土を自動的にダウンロードする
 地形データ及び航空写真の自動ダウンロードが可能

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

43

自動車制御の拡張
 再現性が求められるシーンのため以下の車両制御モードを追加：••••

位置直接指定速度指定：道なり又は、任意の速度ベクトル
加速度指定：道なり又は、任意の加速度ベクトル
車間距離維持：対象の車両との距離を維持しながら走行•

各モードで車両の方位角（ヨー、ピッチ、ロール）が自動的に計算され、細かな制御をせずにズムーズな車両方向変化が実現•

リポジション機能：自車、他車を任意の場所に即座に移動させることが可能

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

自車

先行車１

先行車２

44

カメラセンサーモデルオプション
 任意のカメラ視点と姿勢を定義（既存機能）
 カメラのレンズ特性及び解像度設定
 別画面での表示、クラスター構成に対応
 AVI出力機能（他の出力方式は個別にご提案できます）

クラスター
クライアント

カメラ１
カメラ２

クラスター
マスタ（シミュレーション）
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

カメラ３45

UC-win/Road Ver.12.1（2017年７月19日リリース） クイックビルディング機能
 オブジェクト一括移動機能
 新規プラグインオプション追加
DSコース変換／スピードメータ表示
HTC VIVE／OpenFlight／環境アセス
 DSプラグイン、SfM プラグインの64bit対応

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

46

UC-win/Roadの64ビット化開発にあたって本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

UC-win/Roadの開発環境
初期からDelphiで開発。
メリット：・ライブラリが豊富
・またライブラリ、フレームワークが明快で開発しやすい・コードの見やすさ→ミスコーディングを防ぎ、クオリティ維持に繋がる→生産性が向上し、チームワークがとりやすい少人数の分業ができるため、わずか数名の開発チームながら2年という期間で初期バージョンをリリースできた。
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

48

UC-win/Road Ver.12 64bitネイティブ対応版開発
Delphi XE2から10.1 Berlinに変更
3Dシミュレーション演算は、32bitを前提とした設計で行っていた。変数宣言の変更や64bitに対応した演算方法に変更するなど、これまで積み上げてきたソースコードを逐一修正する必要があった→Delphiの提供コンポーネントと言語特性により開発期間が大幅に短縮→コンパイル時に設定を64bitにすることで簡単に64bit化することができ、大幅な工期短縮となった
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

49

UC-win/Road Ver.12 64bitネイティブ対応版開発
・多数存在する独自開発ライブラリを64bitに対応するために必要な変数や処理の変更では、Delphiが持つ明瞭な言語構文により、修正箇所を簡単に検索・修正できた。
・高度なシステム構築においてもDelphiを活用することで、迅速に開発できる・IoT時代のマルチプラットフォーム化したシステムの開発も効率よく行える。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

50

開発環境とプロジェクトオプション
1. 開発環境とプロジェクトオプションについて
2. コード修正について
3. DLLの64bit対応について
4. デバックについて
基本参考資料：『32 ビット Delphi アプリケーションの 64 ビット Windows への変換』
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

51

コード修正

1. ポインタをInteger型にキャストしている箇所の修正
2. Extended型バイナリデータの扱い

64bitコンパイラではExtended型がDouble型と同じ8バイト実数になる。
コンパイラがコードを生成するので精度以外は問題ない。が、Extended型のバイナリデータを32bitプログラムと共用する場合に問題になった。このような箇所では明示的にDouble型を使用。

3. インラインアセンブリコードの64bit化

開発ソースコード中の一部にアセンブラコードを使用していた。速度性
能や記述制限等でアセンブラ記述しなければならないところ以外は、極力パスカルコードで既述しなおしてメンテナンス性を向上させた。
OpenCVラッパーライブラリにもアセンブリコードがあったが、これについては新しいライブラリバージョンを適用。（→Ver.2.4.13）
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

52

コード修正4.

32bit／64bit両対応できない箇所の修正

プラットフォームによって使用するAPIや手続き方法が異なる箇所では、コンパイラ指令 $if defined(Win64)）にて条件コンパイルするように修正。

5. WinAPIコールのメッセージ構造体の確認

構造体のサイズ、アラインメントに問題がでる場合があった。独自のメッセージ構造体を定義している部分がいくつかあるが、以下で問題が出た。
TCMF8RemoveFinalDockClient = packed record
Msg: Cardinal;
ClientJustRemoved: TF8MultiDockHost;
LastClientRemaining: TF8MultiDockHost;
Result: LRESULT;
end;

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

53

コード修正このような場合、メッセージハンドラで構造体をキャストするとアドレス違反になる。正しくは以下のようにして、サイズ調整しなければならない。
TCMF8RemoveFinalDockClient = packed record
Msg: Cardinal;
MsgFiller: TDWordFiller;
ClientJustRemoved: TF8MultiDockHost;
LastClientRemaining: TF8MultiDockHost;
Result: LRESULT;
end;

TDWordFiller型はVCLで定義されており、条件コンパイルによりサイズ調整するようになっている。
その他、以下のTipsも参考になった。
64 ビット Windows プログラミング ガイド for Delphi 64 ビット コンパイラ
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

54

DLLの64bit対応
実行時にどのようなライブラリがロードされているのか調査
64bit対応が必要なモジュールを調べるため、32bit版UC-win/Roadを実行してメモリにローディングされているbplまたはDLLをリストアップした。その時に使用したツールがProcess Explorer（procexp.exe）で窓の社から入手できる。

実行時にどのようなモジュールが必要か簡単に分かるためインストーラ作成にも役立った。
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

55

DLLの64bit対応
社外ライブラリについて、32bit／64bit両対応のDLLもある
社外モジュールについても64bit対応が必要だが、 OpenGL32.dllなど、まれに32bit／64bit両方対応のものがあり。以下の判別方法で調査可能。
EXE/DLLの64bit対応判別方法
・実行してタスクマネージャーから確認する・バイナリエディタでPEヘッダーを確認する
・専用の判別ツールを使う（apec.exe）
http://yamori-jp.blogspot.jp/2011/03/windows-64-bit-exe-dll.html

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

56

コード修正 DLLをロードするときに下記のようなコードの記載があった。
TABCThread = class(TF8Thread)
private// DLL handle
DLLHandle : Cardinal;…

// Load DLL
DLLHandle := LoadLibrary(PCAN_BASIC_DLL_NAME);
if DLLHandle <> 0 then…

 32bitアプリケーションでは問題なかった。しかし、64bitでは。。。
 Cardinalではなく、THandleへ変更
 THandleは、System.pasにて、THandle = NativeUInt;

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

57

THANKS!
www.embarcadero.com/jp
第34回 エンバカデロ・デベロッパーキャンプ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。