レジストリ利用のデマンドロード

レジストリベースのデマンドロード機構は、ARX / BRX / .NETの開発者が、CADシステムのスタートアップ時やアプリケーション固有の「カスタムエンティティ」の存在時、アプリケーション定義のコマンドや関数の呼び出し時に、柔軟かつ快適にARX / BRX / .NETアプリケーションモジュールをロードできるよう、以前より提供されてきた手法です。

アプリケーションのインストーラから、専用のレジストリエントリを追加することで、ターゲットになる BricsCAD にうまく統合させることができます。

BricsCAD V17 以降では、Lisp や VBAアプリケーションでも利用できます。Lisp / VBA 固有の詳細は BricsCAD によって自動的に処理され、均一で一貫したロジックが提供されます。

AutoCAD で ARXアプリケーション開発されていた方向けの情報

BricsCAD の BRX プログラムのデマンドロードは、レジストリの位置(後述)が違うことを除いて、AutoCADでARXをロードするのと同様です。

レジストリキーの登録

Lisp/VBAアプリケーションの DemandLoad サポートを定義するには、いくつかのレジストリエントリを定義する必要があります(通常はアプリケーションインストーラによって定義されます)。

「MyApp」という名前のアプリケーションの例 :

主なレジストリキーは、以下のようになります。
HKEY_CURRENT_USER または HKEY_LOCAL_MACHINEの下にあります。

Software\Bricsys\BricsCAD\Applications<MyApp>

注意:古い 32bit 版の BricsCAD を 64 bit のWindows上で動作させる場合、HKEY_LOCAL_MACHINE を使用するときは、"Wow6432Node " にする必要があります。そのため、HKEY_CURRENT_USER を使用することが推奨されます。

Software\Wow6432Node\Bricsys\BricsCAD\Applications<MyApp>


アプリケーションの動作を定義するためのレジストリキー

・Loader (string)
"アプリケーションファイル名" : Lisp/VBAアプリケーションファイル、パスなし、相対パスまたは絶対パス付き

・LoadCtrls (dword)
ロードモード : 2 = "OnStartup" 4 = "OnCommand"

・Description (string)
"オプションのアプリケーション説明" : ロードに失敗した場合、エラーメッセージに使用されます。

・Managed(dword)
マネージかどうか。:0="非マネージ", 1="マネージ"
BRX, .NET アプリケーションの場合に必要、LISP・VBAアプリでは不要。

.\Commands サブキーでアプリケーション固有のコマンドを任意に定義できます。

・GlobalCmd" (string)
"LocalCmd" : "ローカライズされた "コマンド名を定義できます(オプション)。GlobalCmd "と "LocalCmd "の両方が同じである可能性があります。複数のコマンド名エントリーが可能です。

 ・コマンドのサブキーは、"OnCommand "ロード・メカニズムを使用したい場合に必要です。



LISPアプリケーションのためのいくつかの注意事項

LoadCtrls :

・2 (OnStartup) を使用すると、「すべての図面に対して読み込む」ことを意味します。(BricsCAD起動時の読み込みはあまり意味がないため)

・4 (OnCommand) を使用する場合、LispアプリケーションはLispコマンド定義 (defun C:GlobalCmd ...) を提供する必要があり、同様の定義 (defun C:LocalCmd ...) をする必要はありません。

・注1: レジストリのコマンド名定義に C: 接頭辞は使用不可です。

・注2: レジストリ定義に基づき、BricsCAD DemandLoad機構は、Open/New された各図面に対して、C:コマンドの内部ラッパーを自動的に作成します。

・副次的な効果として、C:GlobalCmd と C:LocalCmd コマンドは、コマンドバーのオートコンプリート機能でも利用可能です。

VBA アプリケーションのためのいくつかの注意事項

LoadCtrls :

・2 (OnStartup) を使用すると、VBAファイルは(BRX + .NET モジュールのように)グローバルにロードされるため、「BricsCAD起動時にロードする」という意味になります。

・4 (OnCommand) を使用する場合、VBAアプリケーションはメイン関数GlobalCmdを提供する必要があります - LocalCmd を定義する必要はありません。

・注1: BricsCAD デマンドロード機構は、これらのレジストリ定義に基づいて、開く/新規作成された各図面に対して、コマンドの内部ラッパーを自動的に作成します。

・2つの副次的効果
-GlobalCmdとLocalCmdコマンドは、コマンドラインのオートコンプリート機能でも使用可能です。
-通常、VBAアプリケーションは、コマンドラインで利用可能な独自のコマンドを定義できませんが、デマンドロード メカニズムを使用すると、(自動的に作成されたコマンドラッパーに基づいて)これが可能になります。

上記のレジストリキーについては、以下の画像を参照してください。



LISPアプリケーション:

メインレジストリエントリ、モジュールのプロパティを定義(OnCommandロードを使用)。

1674626645047-7rnrh9SHj3BcadTools というアプリをインストールしたときの状態

VBA アプリケーション :

主なレジストリ項目、モジュールのプロパティの定義 (OnCommand ローディングを使用)

1675037517259-vhRCNID4YfVBAのサンプルアプリを登録した状態

アプリケーションの "Commands" レジストリエントリ

前述の通り、翻訳コマンド名が不要な場合は名前のみでデータ部分は空で構いません。

1674626735334-AyhYbVEyw5BcadTools というアプリのコマンドの状態

1675037568080-w0xvjsLNrTVBAのサンプルアプリでコマンド名を登録した状態



アプリケーションロードに登録する

アプリケーションロード(_appload)コマンドから、ロードするアプリケーションのファイルを登録し、自動ロードのチェックを入れて使用する方法もあります。

1675038535729-QmrdrhpLcCAPPLOADコマンドでLISPのプログラムを追加した例
追加はダイアログの[+]ボタンからロードするファイルを選択します。
登録されたプログラムは上から順にロードされます。

1674627305093-HeccyxtpjwAPPLOADコマンドでロードできるファイル



LISPファイルのロード方法色々

on_doc_load.lsp に記述してロード。

on_doc_load.lsp ファイルは、図面ファイルが開かれたときにロードされるファイルです。サポートファイルの検索パスの走査順にファイルが検索され、最初に見つかった on_doc_load.lsp が読み込まれます。ファイルオープン時の初期化などで利用されるものでもありますが、on_doc_load.lspファイル中に、ロードするLISPファイルを記述しておくことで、プログラムをロードできます。


; ロードするファイルの例 (検索パスにプログラムのフォルダが登録されていればファイル名のみで問題ありません。)
(load "Test.des" "\nTest.lsp が見つかりませんでした")


なお、同種のファイルとしてon_start.lsp というファイルがあります。こちらは、初期値としては BricsCAD の起動後に最初に開いた図面ファイルのみに読み込まれます。
* システム変数の "acadlspasdoc" の設定でファイル毎に変更可能。


開発環境 BLADE からのロード

LISP のプログラムファイルは、BricsCAD に標準搭載されている BLADE というIDEからロードする方法があります。主に開発中に使用し、Lite からでも利用できます。

1674627584926-UaJlPrJwOGBLADE 上のファイルロード項目

メニューファイル名.mnl ファイルに記述してロード

メニューファイルと関連付けされたプログラムをロードするための機構です。メニューファイルと同名の .mnl ファイルに記述しておくとメニューファイルのロードと合わせてロードされます。

例えば、BricsCAD標準のメニューの default.cui では、default.mnl となります。部分メニューファイルも対象です。

ドラッグ&ドロップでロード

デマンドロードではありませんが、エクスプローラなどからLISPプログラムのファイルを BricsCAD上にドラッグ&ドロップする形でもロードできます。
複数のファイルをドロップしてロードすることもできます。

1675038251042-h8tmjx5tTSドラッグ&ドロップでロード

以上で、プログラムのロード方法について、一通り説明しました。
アプリケーションを開発されている方は、インストーラからデマンドロードの機構に合わせてレジストリ登録しておくと、ユーザの設定の手間をなくして導入しやすくなると思いますので、ご活用ください。