解決C#,CAD二次開發實例化AcadApplicationClass失敗


用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次


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM