用C#开发AutoCAD2004不能获取AcadApplication
<p><font face="Verdana">在用C#进行AutoCAD二开发的时候,对2002以及2005以后的版本都能正常获取AcadApplication;</font></p><font face="Verdana"><p><font face="Verdana">AcadApplication _application = (AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application.16");</font></p>
<p> </p></font>
<p><font face="Verdana">但用到2004的时候就出现以下问题:</font></p>
<p> </p>
<p><font face="Verdana">无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“AutoCAD.AcadApplication”。</font></p>
<p><font face="Verdana">此操作失败的原因是对 IID 为“{8E75D910-3D21-11D2-85C4-080009A0C626}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。</font></p>
<p> </p>
<p>我看了下CAD的接口,如下</p>
<p><font face="Verdana"><br/>public interface AcadApplication : IAcadApplication, _DAcadApplicationEvents_Event</font></p>
<p>好像是8E75D910-3D21-11D2-85C4-080009A0C626的啊~怎么就不行呢?</p>
<p> </p>
<p><font face="Verdana">请教下各位大大,倒底是什么问题啊?</font></p> 没有谁遇到过类似的问题啊?~ <p>GetActiveObject("AutoCAD.Application.16");</p>
<p>改为:GetActiveObject("AutoCAD.Application.16.0");试试</p>
<p>改为:GetActiveObject("AutoCAD.Application");试试</p> <p>谢谢~</p>
<p>不过用GetActiveObject("AutoCAD.Application.16.0");不能得到2004的进程</p>
<p>GetActiveObject("AutoCAD.Application");和GetActiveObject("AutoCAD.Application.16");的效果是一样的~</p> <p><font face="Verdana"> private void button1_Click(object sender, EventArgs e)<br/> {<br/> AcadApplication _AcadApp = null;<br/> AcadDocument _AcadDoc = null;<br/> try<br/> {<br/> _AcadApp = (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application");<br/> try<br/> {<br/> _AcadDoc = _AcadApp.ActiveDocument;<br/> }<br/> catch <br/> {<br/> try<br/> {<br/> _AcadDoc = _AcadApp.Documents.Add("acadiso.dwt");<br/> }<br/> catch (System.Exception ex)<br/> {<br/> MessageBox.Show("AutoCAD.Application " + ex.Message);<br/> }<br/> }<br/> }<br/> catch<br/> {<br/> try<br/> {<br/> _AcadApp = new AcadApplication();<br/> _AcadApp.Visible = true;<br/> try { _AcadDoc = _AcadApp.ActiveDocument; }<br/> catch <br/> {<br/> try<br/> {<br/> _AcadDoc = _AcadApp.Documents.Add("acadiso.dwt");<br/> }<br/> catch (System.Exception ex)<br/> {<br/> MessageBox.Show("AutoCAD.Application " + ex.Message);<br/> }<br/> }<br/> }<br/> catch (System.Exception ex)<br/> {<br/> MessageBox.Show("AutoCAD.Application " + ex.Message);<br/> }<br/> }<br/> }</font></p>
<p>GG?MM?</p>
<p>以上代码在我这里OK的哦!AutoCAD 2004 英文版</p> GetActiveObject首先要启动cad2004才可以 本帖最后由 x_qingh 于 2011-5-12 15:22 编辑
应该是AutoCAD2002和AutoCAD2004的DLL引用的时候出的问题,这两个版本都安装后,就会在二次开发的时候出现类似的错误提示。最后放弃了2002的。
页:
[1]