解决C#,CAD二次开发实例化AcadApplicationClass失败
2012-12-10 11:03
429 查看
用C#,CAD做的一个程序,环境(vs2008,AutoCAD2007 32位)代码如下
其中,在new AcadApplicationClass()时,如果系统为64位系统,或者Server2003(包括32和64位),第一次执行时会卡几分钟,最后报错——检索 COM 类工厂中 CLSID 为 {28B7AA99-C0F9-4C47-995E-8A8D729603A1} 的组件时失败,原因是出现以下错误: 80080005。但此时再次重新执行,则成功。
目前我的解决办法不是很好,就是用执行exe的方法去启动CAD程序,然后再获取CAD程序,这样
其中tAcadExePath是CAD主程序acad.exe的路径,CADVersionHelper.CADVersionNo是CAD的内部版本号(如2007是17.0),那个while循环是因为如果CAD没完成启动Marshal.GetActiveObject获取不到CAD程序,因为每隔2秒获取一次,直到成功获取为止,最多获取20次
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次
相关文章推荐
- C#操作Word导致 “Microsoft.Office.Interop.Word.ApplicationClass”的 COM 组件错误的解决方法
- idea上使用maven分模块开发时解决spring注入失败问题java.lang.IllegalStateException: Failed to load ApplicationContext
- C#访问共享目录与Word.ApplicationClass发生冲突的解决办法
- C#引用Office.word出错的解决办法-无法嵌入互操作类型“Microsoft.Office.Interop.Word.ApplicationClass” 【转】
- 访问共享目录C#访问共享目录与Word.ApplicationClass发生冲突的解决办法
- C#开发Windows Services服务--服务安装失败的解决办法
- C#开发Windows Services服务--服务安装失败的解决办法
- 实例开发用crontab+脚本解决ecos老版本产品中的失败请求“重新发送”自动化
- cad二次开发中,vc7下无法附加进行的解决办法
- eclipse开发webservice实例及问题解决
- 异常解决 java.io.FileNotFoundException: class path resource [spring/applicationContext_*.xml]
- c# 解决面向对象八皇后问题的实例
- C#软件开发实例.私人订制自己的屏幕截图工具(十)在截图中包括鼠标指针形状
- 快速解决vue动态绑定多个class的官方实例语法无效的问题
- 实例C#开发TCP/IP聊天室
- RAC 安装patch 后启动实例 报错 ORA-00439 feature not enabled- Real Application Clusters 解决方法
- 使用gSOAP开发实例(4) iconv解决中文乱码问题(续)
- .NET分布式开发报错:“与基础事务管理器的通信失败”的解决方法
- 从 IClassFactory 为 CLSID 为 {00024500-0000-0000-C000-000000000046} 的 COM 组件创建实例失败,原因是出现以下错误: 8001010a解决办法
- 解决 01-Jul-2016 10:49:05.875 WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [ROOT] registered the JDBC driver [com.mysql.jdbc.D