前提・実現したいこと
C#プログラムからCOM参照により起動したBricsCADで、アクティブとなっている図面のプロパティにアクセスしたい。
発生している問題・エラーメッセージ
BricsCADアプリケーションをCreateObjectメソッドで起動し、
Openメソッド(Documentsクラス)でアクセスしたい図面を開き、
ActiveDocumentよりModelSpace, ActiveLayerプロパティにアクセスした際、以下のエラーが発生する。
"インターフェイスが登録されていません (HRESULT からの例外:0x80040155)"
該当のソースコード
以下のような、BricsCADを起動 → 既存図面を開く → 図面プロパティにアクセス する関数を作成しました。
BricscadApp Type Library,BricscadDB Type Libraryの参照設定は行っています。
コードはこちらを参考にしました。
C#
1 // ファイル名でdwgを開く 2 public static void OpenDrawing(string fileName) 3 { 4 AcadApplication acAppComObj = null; 5 const string strProgId = "BricscadApp.AcadApplication"; 6 7 try 8 { 9 // BricsCADアプリケーションの取得 10 acAppComObj = (AcadApplication)Marshal.GetActiveObject(strProgId); 11 12 } 13 catch 14 { 15 try 16 { 17 // BricsCADアプリケーションの起動 18 acAppComObj = (AcadApplication)Activator.CreateInstance(Type.GetTypeFromProgID(strProgId), true); 19 } 20 catch 21 { 22 return; 23 } 24 } 25 26 // BricsCADを可視化 27 acAppComObj.Visible = true; 28 29 // 図面を読み込み 30 acAppComObj.Documents.Open(fileName); // ←BricsCADが起動し図面が実際に開く 31 32 // アクティブドキュメントを取得 33 AcadDocument acDocComObj = acAppComObj.ActiveDocument; // ←ここでModelSpaceが取得できていない 34 BricscadDb.AcadModelSpace BcadMs = acDocComObj.ModelSpace; 35 }
試したこと
・AutoCADで同様にコーディングを行った場合は、正しくModelSpaceを取得できました。AutoCADと参照すべきクラスが異なることによるエラーと思われますが、具体的な修正方法が分からずにいます。
・別途.NET APIとCOM参照を組み合わせたプログラムにて同様のアプリケーションを作成してみようと試みましたが、こちらは関数を呼び出す段階で、以下のエラーが発生しました。
型 'System.IO.FileNotFoundException' のハンドルされていない例外が ConsoleBricsCAD_TEST.exe で発生しました 追加情報:ファイルまたはアセンブリ 'BrxMgd, Version=19.2.0.13510, Culture=neutral, PublicKeyToken=null'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
実装を試みた関数は以下の通りです。
参照設定にBrxMgd.dll, TD_Mgd.dllを追加しています。
コードはこちらを参考にしました。
C#
1 // ファイル名でdwgを開く ←この関数を呼び出したタイミングでエラー 2 public static void OpenDrawing(string fileName) 3 { 4 // BricsCADアプリケーションの取得 5 BricscadApp.AcadApplication app = Bricscad.ApplicationServices.Application.AcadApplication as BricscadApp.AcadApplication; 6 // dwgを開く 7 BricscadApp.AcadDocument doc = app.Documents.Open(fileName, false, null); 8 // 開いたdwgをアクティブに 9 if (doc != null) 10 { 11 app.ActiveDocument = doc; 12 } 13 }
BrxMgd.dllが参照しているライブラリが無いことによるエラーと認識していますが、別途何かインストールが必要なのでしょうか。
以上、BricsCADに関して、同じような手段でプログラムを実装されている方がおられれば、ご教示よろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
開発環境は、Visual Studio2013です。
BricsCADは、V19(体験版)、AutoCADは2015バージョンです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/07 05:35
2019/08/07 06:42