从.Net流程

时间:2015-11-27 16:25:10

标签: c# .net autocad autocad-plugin

我试图从.Net流程加载AutoCAD 2015,以便我可以向文档发送命令来创建/修改块。

我尝试了这两种方法,但似乎都没有。

第一种方法:

AcadApplication app = new AcadApplication();
app.Visible = true;

第二种方法:

var t = Type.GetTypeFromProgID("AutoCAD.Application", true);
dynamic obj = Activator.CreateInstance(t, true);

在这两种情况下我都得到COM异常。有什么帮助吗?

如评论中所述,这不是重复,我尝试了here中提到的两种方法。

COM异常 -

  

使用CLSID检索组件的COM类工厂   {0B628DE4-07AD-4284-81CA-5B439F67C5E6}由于以下原因而失败   错误:80080005服务器执行失败(来自HRESULT的异常:   0x80080005(CO_E_SERVER_EXEC_FAILURE))。

2 个答案:

答案 0 :(得分:2)

我建议您在每次运行应用程序时创建新实例之前先尝试获取AutoCAD的现有实例。

每次创建一个实例非常昂贵。

try
{
  GetAutoCAD();
}
catch (COMException cx)
{
    try
    {
        StartAutoCad();
    }
    catch(Exception ex)
    {
      Log.Error(ex);
      throw;
    }
}

void GetAutoCAD()
{
    // try to Get an instance
    _application = Marshal.GetActiveObject(_autocadClassId);
}

void StartAutoCad()
{
    var t = Type.GetTypeFromProgID(_autocadClassId, true);
    var obj = Activator.CreateInstance(t, true);
    _application = obj;
}

答案 1 :(得分:1)

最后,我能够让它为我奔跑。 (在这里张贴一个人就像我一样浪费时间)

不确定究竟是什么问题。奇怪的是,以正常用户身份运行VS 2013工作正常但是如果我以管理员身份运行它,它总是因上述COM异常而失败。