ObjectARX の開発とデバッグ環境

AutoCAD API の 1 つである ObjectARX は、カスタム オブジェクトの定義を含め、AutoCAD カスタマイズで最も強力な API です。その登場は1996 年初頭にリリースされた AutoCAD R13 C4 からで、すでに 20 年弱の歴史があります。

Table comparing capabilities of different AutoCAD APIs including Visual LISP, ActiveX/VBA, ObjectARX, and .NET API.

一見すると、ObjectARX が万能なような印象を受けますが、開発環境や効率を考えた場合、単純にそうとも言い切れません。

ObjectARX アプリケーションの原則

ObjectARX アプリケーション(.arx、.dbx、.crx ファイル)は、AutoCAD とプロセスやメモリ空間を共有する DLL ファイルの拡張子を変更したものです。32 ビット、64 ビット毎に異なる実行ファイルを持つ AutoCAD にロードして実行させるためには、32 ビット AutoCAD 用と 64 ビット AutoCAD 用に、異なる実行形式を用意する必要があります。

32 ビット AutoCAD に 64 ビット ObjectARX アプリケーションをロードしたり、64 ビット AutoCAD に 32 ビット ObjectARX アプリケーションをロードしたりすることは出来ません。

ObjectARX の歴史的背景

ObjectARX の登場当時、当然、.NET Framework は存在していませんでした。 このため、ObjectARX で使用する言語環境は、.NET Framework に依存しない Unmanaged C++ で、現在でも変わりありません。.NET Framework の利点は、過去のブログ記事 AutoCAD .NET API の利点 で触れていますが、重要なのはプラットフォームに依存しない点です。

AutoCAD .NET API では、生成される DLL ファイルはあくまで中間ファイルで、実行時にはじて JIT コンパイラがプラットフォーム差に応じた実行形式にコンパイルされるため、開発者が 32 ビット AutoCAD 用の開発、64 ビット AutoCAD  用の開発で、差異を特に意識する必要はありません。

逆に、.NET Framework を利用しない ObjectARX では、32 ビット AutoCAD 用の開発、64 ビット AutoCAD 用の開発を意識しなければなりません。1 つの Visual Studio プロジェクトですべてのプラットフォームをカバーするためには、ObjectARX のビルドとデバッグ(単なる実行テストも含む)に、一定の環境設定や準備が必要となります。

ビルド

開発に利用する Visual Studio 自体は 32 ビットアプリケーションであるため、Visual Studio 自体を 32 ビット版 Windows と 64 ビット版 Windows の両方にインストールして利用することが可能です。32 ビット アプリケーションを 64 ビット Windows で実行できるようにしているのが、Windows に搭載されている WOW64 という仕組みです。

ObjectARX SDK には、32 ビット用のビルドに用いるヘッダーとライブラリ ファイルが、プラットフォーム共通の inc フォルダとは別に、それぞれ、inc-win32 フォルダ、lib-win32 フォルダに用意されております。同様に、64 ビット用のビルドに用いるヘッダーとライブラリ ファイルは、inc-x64 フォルダ、lib-x64 フォルダに用意されています。

Visual Studio プロジェクト内で構成マネージャを使えば、ターゲットとなるプラットフォーム(32 ビット、64 ビット)に応じて、参照するヘッダー ファイル格納フォルダとライブラリ格納フォルダを切り替えることが出来ます。プロジェクトに構成が適切に設定されていれば、64 ビット Windows 上の Visual Studio で 32 ビット AutoCAD 用 ObjectARX アプリケーションをビルドしたり、その逆が可能です。 

http://www.autodesk.co.jp/developautocad からダウンロード可能な ObjectARX Wizards for AutoCAD  を使ってプロジェクトを作成すると、はじめから 32 ビット用の Debug モードと Release モード、また、64 ビット用の  Debug モードと Release モードの 4 つの構成がプロジェクト内に生成されます。添付画像は、ObjectARX Wizard で作成したプロジェクトのプロパティ画面で、構成切り替えを表示させたものです。

Screenshot of a software development environment with project settings, displaying platform options including Active (x64) and Win32 in Japanese.

デバッグ

32 ビット Windows 上には、どんな 64 ビット アプリケーション(ソフトウェア)もインストールすることは出来ません。AutoCAD の場合には、32 ビット Windows にインストールして実行することが出来るのは、32 ビット AutoCAD のみです。

一方、64 ビット Windows の環境では、 一般的な 32 ビット アプリケーション(ソフトウェア)を、WOW64 で実行せることが出来ます。ところが、AutoCAD の場合は少し状況が異なります。AutoCAD のインストーラは、64 ビット Winodws メモリを最大限利用する目的で、64 ビット Windows に 32 ビット AutoCAD をインストールできないようにブロックするようにプログラムされています。

64 ビット Windows 上で 32 ビット AutoCAD のインストーラを起動すると、次のようなエラーでインストールが抑止されるはずです。

Error message indicating the need for a 64-bit installer to run on a 32-bit operating system.

結果として、64 ビット Windows 上では、32 ビット AutoCAD を実行させることが出来ません。32 ビット ObjectARX アプリケーションのロードと実行には 32 ビット AutoCAD が必須なため、デバッグをおこなうには、 32 ビット Windows に 32 ビット AutoCAD をインストールした環境を用意する必要があります。

 ここまでの内容をまとめると、次のようになります。

A comparison table showing compatibility of ObjectARX builds and debug capabilities for 32-bit and 64-bit Windows environments.

今後、32 ビット Windows の環境は徐々に減っていくものと思われますが、両方のプラットフォーム用に ObjectARX アプリケーションを開発する場合には、この手間について、考察をお勧めします。

特に大きな理由がない限り、.NET API が最適な選択と言えます。

By Toshiaki Isezaki

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading