AutoCADで.NETをロードする方法をお探しですね。
広告
AutoCADでLISPやDLLを読み込んで使う方法をわかりやすく解説
AutoCADで作業を効率化するとき、外部のプログラムファイルを読み込んで使うことがあります。
よく使われるのが、AutoLISPで作った「.lsp」ファイルや、.NET APIで作った「.dll」ファイルです。
ただ、ファイルの種類によって読み込み方が違うので、間違った方法を使うと「あれ、読み込めない…」となってしまいます。
この記事では、AutoCADでLISPファイルやDLLファイルを読み込んで実行する方法を、基本的な操作から応用的な使い方まで順番に説明していきます。
AutoCADで読み込めるファイルって何があるの?
AutoCADは標準機能だけでもいろいろなことができますが、外部のプログラムを読み込むことで、もっと便利な機能を追加できます。
よく使われるのはこんなファイルです:
– **AutoLISPの「.lsp」ファイル** – 比較的簡単に作れて、日常業務の効率化によく使われます
– **.NET APIの「.dll」ファイル** – C#やVB.NETで作った本格的なアドイン
– **ObjectARX系の「.arx」「.crx」ファイル** – より高度な機能を持つプラグイン
ここで大事なのは、**ファイルの種類によって読み込み方が全然違う**ということです。
LISPファイルを読み込むときは`APPLOAD`コマンドか`load`関数を使います。
一方、DLLファイルを読み込むときは`NETLOAD`コマンドを使います。
同じ「ファイルを読み込む」という作業でも、中身の仕組みが違うので使うコマンドも違うんですね。
だから、DLLファイルを`APPLOAD`で読み込もうとしたり、LISPファイルを`NETLOAD`で読み込もうとしたりしても、うまくいきません。
もう一つ注意したいのは、**ファイルを読み込んだだけでは処理が動かない**ことが多いという点です。
たとえば、LISPファイルの中に`(defun C:HelloWorld () …)`というコマンドが定義されている場合、ファイルを読み込んだ後にコマンドラインで`HELLOWORLD`と入力して初めて処理が実行されます。
DLLファイルも同じで、読み込んだ後にカスタムコマンドを実行する必要があります。
つまり、AutoCADで外部プログラムを使うときは、**「読み込み」と「実行」は別の作業**だと考えておきましょう。
LISPファイル(.lsp)を読み込んで使う方法
LISPファイルを手動で読み込む一番わかりやすい方法は、`APPLOAD`コマンドを使う方法です。
AutoCADのコマンドラインに`APPLOAD`と入力すると、ファイル選択の画面が出てきます。
そこで使いたい`.lsp`ファイルを選んでロードすればOKです。
読み込みが成功すれば、そのLISPファイルの中で定義されている機能が使えるようになります。
よく使うLISPファイルなら、起動時に自動で読み込む設定にしておくと、毎回手動で読み込む手間が省けて便利です。
コマンドラインから直接読み込むこともできます。
その場合は、AutoLISPの`load`関数を使います。
“`lisp
(load “C:/work/sample.lsp”)
“`
ここで注意してほしいのが、**ファイルパスの書き方**です。
Windowsでよく見る円マーク(¥)やバックスラッシュ(\)を1つだけ書くと、AutoLISPが特殊な文字として解釈してしまい、うまく読み込めないことがあります。
なので、`C:/work/sample.lsp`のようにスラッシュ(/)を使うか、`C:\\work\\sample.lsp`のようにバックスラッシュを2つ重ねて書きましょう。
「ファイルが見つかりません」というエラーが出たら、まずパスの書き方をチェックしてみてください。
LISPファイルを読み込んだ後は、ファイルの中で定義されているコマンドを実行します。
たとえば、LISP内にこんな定義がある場合:
“`lisp
(defun C:HelloWorld ()
(alert “Hello Lisp World”)
)
“`
読み込んだ後にコマンドラインで`HELLOWORLD`と入力すると、処理が実行されます。
`C:`を付けて定義された関数は、AutoCADのコマンドとして使えるようになるんです。
ただし、`alert`のようにダイアログボックスを表示する処理は、普通のAutoCAD画面では問題なくても、後で説明するバッチ処理やクラウド処理では使えません。
自動処理で使うLISPは、ユーザーの操作を待つダイアログやメッセージボックスを出さないように作っておく必要があります。
DLLファイルを読み込んでカスタムコマンドを使う方法
.NET APIで作ったAutoCAD用のDLLファイルを読み込むときは、`NETLOAD`コマンドを使います。
AutoCADのコマンドラインに`NETLOAD`と入力して、使いたい`.dll`ファイルを選択すると、ファイルがAutoCADに読み込まれます。
DLLの中にカスタムコマンドが定義されていれば、読み込んだ後にそのコマンド名を入力して実行できます。
LISPと同じで、DLLも**読み込んだだけで全部の処理が動くわけではありません**。
基本的には読み込んだ後にコマンドを呼び出す流れになります。
DLLが読み込めない場合は、いくつか原因が考えられます:
– ファイルの置き場所が適切でない
– 参照しているライブラリが足りない
– AutoCADのバージョンが合っていない
特に最近のAutoCADでは、セキュリティ対策として、信頼できない場所にあるファイルの読み込みが制限されることがあります。
AutoCADのオプション設定で「信頼できる場所」にフォルダを追加するか、すでに信頼されているフォルダにファイルを置くことで、警告やエラーを回避しやすくなります。
社内で配布する場合は、みんなで同じフォルダを使うように統一しておくと管理が楽になります。
DLLの場合は、**どのバージョンのAutoCAD向けにビルドしたか**も重要です。
AutoCADの.NETアドインは、参照している`AcMgd.dll`、`AcDbMgd.dll`などのバージョンが実行環境と合っていないと、読み込み時にエラーになることがあります。
特にAcCoreConsole.exe(後で説明します)での実行を考えている場合、画面表示に関するAPIやダイアログ表示を前提にした処理は避ける必要があります。
普通のAutoCADでは動くDLLでも、コアエンジン環境では動かないことがあるので、どの環境で使うアドインなのかを最初に決めておくことが大切です。
読み込みと実行の流れをまとめると:
– **AutoLISP(.lsp)** → `APPLOAD`または`(load “パス”)`で読み込み、定義されたコマンドを実行
– **.NET DLL(.dll)** → `NETLOAD`で読み込み、DLL内のカスタムコマンドを実行
– **ObjectARXやCRX** → 環境に応じて`APPLOAD`などで読み込み
この違いを理解しておくと、「ファイルはあるのに実行できない」「読み込んだはずなのにコマンドが見つからない」といったトラブルを解決しやすくなります。
また、読み込んだ後に使うコマンド名は、LISPやDLLのコードの中で定義された名前に依存します。
ファイル名とコマンド名が同じとは限らないので、他の人が作ったアドインを使う場合は、説明書やソースコードで実行コマンドを確認しておきましょう。
VBAやAcCoreConsole.exeから使う場合の注意点
AutoCAD VBAからAutoLISPを実行したいときは、`SendCommand`メソッドを使ってコマンドラインに文字列を送る方法があります。
たとえば、VBAで`(load “C:/work/sample.lsp”)`を送信して、その後にLISP内で定義されたコマンド名を送信すれば、VBA処理の一部としてLISPを呼び出せます。
VBAだけでは実装しづらい処理をLISP側に任せたり、昔から使っているLISPをVBAマクロから再利用したりできるので、業務効率化には便利な方法です。
ただし、`SendCommand`で送る文字列の最後には、**Enterキーに相当する改行コードを付ける**必要があります。
VBAからLISPを読み込む例はこんな感じです:
“`vb
Sub RunLisp()
Dim sCmd As String
sCmd = “(load “”C:/work/sample.lsp””)” & vbCr
ThisDrawing.SendCommand sCmd
sCmd = “HELLOWORLD” & vbCr
ThisDrawing.SendCommand sCmd
End Sub
“`
この方法では、AutoCADで開いている図面に対してコマンドが送られます。
LISPファイルは基本的に読み込んだ図面で有効になるので、複数の図面を開いている場合は、どの図面に対して読み込んでいるのかを意識する必要があります。
別の図面でも同じLISPコマンドを使いたい場合は、その図面をアクティブにしてから再度読み込むか、自動読み込みの仕組みを使うのが安全です。
次に、**AcCoreConsole.exe**について説明します。
これはAutoCADのコアエンジンで、画面を表示せずに図面処理やアドインのテストができるツールです。
Design Automation API for AutoCAD向けのアドインをローカルで事前確認するときにも使われますが、普通のAutoCAD画面とは違う制約があります。
たとえば、AcCoreConsole.exeではファイル選択ダイアログを使った操作ができないので、`NETLOAD`や`APPLOAD`でファイルを指定する場合はフルパスを入力する必要があります。
また、環境によってはシステム変数`FILEDIA`が`0`に設定されていて、ダイアログが表示されない状態になっています。
AcCoreConsole.exeでアドインを試すときは、特にこんな点をチェックしておくと失敗を減らせます:
– アドインファイルをAutoCADの信頼できる場所に置いているか
– AutoCADのバージョンとアドインのビルド環境が一致しているか
– ダイアログ、通知、ユーザー入力待ちなど、無人実行を止める処理が含まれていないか
– 保存先フォルダに書き込み権限があるか(必要なら管理者権限で実行)
特にDesign Automation APIやバッチ処理を考えている場合、ユーザーが画面で操作する前提の処理は避けるべきです。
JSONファイルなどからパラメータを読み込む設計にしておけば、クラウド実行やコマンドライン実行でも同じロジックをテストしやすくなります。
また、AcCoreConsole.exeでは図面を切り替える処理や、画面操作を前提としたAPIが制限されることがあります。
普通のAutoCADで動いたからといって、そのまま無人環境で動くとは限りません。
実際に使う前には、こんな順番で確認していくと安全です:
1. 普通のAutoCADでの読み込み確認
2. コマンド実行確認
3. AcCoreConsole.exeでの無人実行確認
まとめ
AutoCADでLISPファイルやDLLファイルを読み込んで実行する方法は、ファイルの種類、実行環境、セキュリティ設定によって変わってきます。
基本的な流れをもう一度まとめると:
– **LISPファイル(.lsp)** → `APPLOAD`または`load`関数で読み込み、定義されたコマンドを実行
– **DLLファイル(.dll)** → `NETLOAD`で読み込み、カスタムコマンドを実行
うまく動かないときは、こんな点を順番にチェックしてみてください:
– パスの書き方は正しいか(スラッシュを使っているか、バックスラッシュを2つ重ねているか)
– 信頼できる場所に置いているか
– AutoCADのバージョンは合っているか
– 画面表示やダイアログを使っていないか
– 実行権限は足りているか
普通の操作だけでなく、VBAとの連携やAcCoreConsole.exeでの事前テストまで押さえておけば、個人の作業効率化から社内アドインの運用、クラウド自動処理まで安定して使えるようになります。
最初は少し難しく感じるかもしれませんが、基本的な流れを理解すれば、AutoCADの作業がぐっと効率的になりますよ。
広告
