明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3453|回复: 6

用C#开发AutoCAD2004不能获取AcadApplication

[复制链接]
发表于 2010-9-11 17:23:00 | 显示全部楼层 |阅读模式

在用C#进行AutoCAD二开发的时候,对2002以及2005以后的版本都能正常获取AcadApplication;

AcadApplication _application = (AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application.16");

 

但用到2004的时候就出现以下问题:

 

无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“AutoCAD.AcadApplication”。

此操作失败的原因是对 IID 为“{8E75D910-3D21-11D2-85C4-080009A0C626}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。

 

我看了下CAD的接口,如下

[Guid("8E75D910-3D21-11D2-85C4-080009A0C626")]
public interface AcadApplication : IAcadApplication, _DAcadApplicationEvents_Event

好像是8E75D910-3D21-11D2-85C4-080009A0C626的啊~怎么就不行呢?

 

请教下各位大大,倒底是什么问题啊?

 楼主| 发表于 2010-9-13 10:23:00 | 显示全部楼层
没有谁遇到过类似的问题啊?~
发表于 2010-9-13 17:29:00 | 显示全部楼层

GetActiveObject("AutoCAD.Application.16");

改为:GetActiveObject("AutoCAD.Application.16.0");试试

改为:GetActiveObject("AutoCAD.Application");试试

 楼主| 发表于 2010-9-13 17:39:00 | 显示全部楼层

谢谢~

不过用GetActiveObject("AutoCAD.Application.16.0");不能得到2004的进程

GetActiveObject("AutoCAD.Application");和GetActiveObject("AutoCAD.Application.16");的效果是一样的~

发表于 2010-9-14 10:42:00 | 显示全部楼层

 private void button1_Click(object sender, EventArgs e)
    {
      AcadApplication _AcadApp = null;
      AcadDocument _AcadDoc = null;
      try
      {
        _AcadApp = (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application");
        try
        {
          _AcadDoc = _AcadApp.ActiveDocument;
        }
        catch
        {
          try
          {
            _AcadDoc = _AcadApp.Documents.Add("acadiso.dwt");
          }
          catch (System.Exception ex)
          {
            MessageBox.Show("AutoCAD.Application " + ex.Message);
          }
        }
      }
      catch
      {
        try
        {
          _AcadApp = new AcadApplication();
          _AcadApp.Visible = true;
          try { _AcadDoc = _AcadApp.ActiveDocument; }
          catch
          {
            try
            {
              _AcadDoc = _AcadApp.Documents.Add("acadiso.dwt");
            }
            catch (System.Exception ex)
            {
              MessageBox.Show("AutoCAD.Application " + ex.Message);
            }
          }
        }
        catch (System.Exception ex)
        {
          MessageBox.Show("AutoCAD.Application " + ex.Message);
        }
      }
    }

GG?MM?

以上代码在我这里OK的哦!AutoCAD 2004 英文版

发表于 2010-9-15 07:22:00 | 显示全部楼层
GetActiveObject首先要启动cad2004才可以
 楼主| 发表于 2011-5-4 11:36:30 | 显示全部楼层
本帖最后由 x_qingh 于 2011-5-12 15:22 编辑

应该是AutoCAD2002和AutoCAD2004的DLL引用的时候出的问题,这两个版本都安装后,就会在二次开发的时候出现类似的错误提示。最后放弃了2002的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 22:55 , Processed in 0.185714 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表