質問: IJCAD2021 Proが入っている環境でC#.Netアプリ開発をしています。参照は"GcadVbaLib"を使っています。 そこでリリースビルドしたアプリを別のPC(IJCAD2020 Std)環境で実行すると、IJCADを動かすところで「クラスが登録されていない」エラーになってしまいます。これは上位バージョンで作ったことが原因と考えられるでしょうか?AutoCadを使っていた時もバージョン違いによるエラーはよくあった記憶があります。
回答: IJCADのVBAコンポーネントは前方互換性も後方互換性も保証していません。バージョンを完全に一致させる必要があります。 * VBA によるプログラミングの概要 – IJCAD ヘルプセンター > > ※ 参照する Object Library は製品のバージョンに合わせたものを有効にしてください。 > > > 一応、C#ではリフレクションAPIまたは`dynamic`型を使って、動的ダックタイピングをすることができます。 これらを活用することで、参照設定を追加することなく、互換性のあるCOMクライアントコードを書くこともできますが、コンパイル時の型チェックやシンボルチェックができず、実行時にすべてのシンボル解決を試みるため、開発効率や実行効率は大幅に低下します。 * .NET - COMの機能を使用する – IJCAD ヘルプセンター * dynamic 型の使用 - C# プログラミング ガイド | Microsoft Docs 一般論として、世の中にあるほとんどのライブラリは、後方互換性はあるものの前方互換性はない、ということがほとんどです。前方互換性に配慮すると、ライブラリへの新しい機能(新しいクラスやメソッド)の追加が難しくなるからです。つまり、新しいバージョンの動的リンクライブラリを利用することを前提としたアプリケーションは、古いバージョンの動的リンクライブラリがインストールされている環境では正常に動作しません。