用C#,CAD做的一個程序,環境(vs2008,AutoCAD2007 32位)代碼如下
private void Form1_Load(object sender, EventArgs e) { AcadApplicationClass tApplication = null; try { tApplication = new AcadApplicationClass(); tApplication.Quit(); MessageBox.Show("成功啟動"); Close(); } catch (Exception ex) { MessageBox.Show("啟動失敗"); Close(); } }
其中,在new AcadApplicationClass()時,如果系統為64位系統,或者Server2003(包括32和64位),第一次執行時會卡幾分鍾,最后報錯——檢索 COM 類工廠中 CLSID 為 {28B7AA99-C0F9-4C47-995E-8A8D729603A1} 的組件時失敗,原因是出現以下錯誤: 80080005。但此時再次重新執行,則成功。
目前我的解決辦法不是很好,就是用執行exe的方法去啟動CAD程序,然后再獲取CAD程序,這樣
string tAcadExePath = CADVersionHelper.GetAcadLocaton(); //執行Exe方式啟動CAD Process.Start(tAcadExePath); AcadApplication tAcadApplication = null; //由於AutoCAD啟動需時間,因此每嘅一定時間獲取一次 int tCheckTime = 0; while (tCheckTime <= 20) { try { tCheckTime++; Thread.Sleep(2000); tAcadApplication = (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application." + CADVersionHelper.CADVersionNo); tAcadApplication.Visible = false; break; } catch { } } return tAcadApplication;
其中tAcadExePath是CAD主程序acad.exe的路徑,CADVersionHelper.CADVersionNo是CAD的內部版本號(如2007是17.0),那個while循環是因為如果CAD沒完成啟動Marshal.GetActiveObject獲取不到CAD程序,因為每隔2秒獲取一次,直到成功獲取為止,最多獲取20次