您的位置:首页 > 移动开发

解决C#,CAD二次开发实例化AcadApplicationClass失败

2012-12-10 11:03 429 查看
用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次
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐