Launch AutoCAD 2015 from .Net process

扶醉桌前 提交于 2019-12-11 01:27:55

问题


I was trying to load AutoCAD 2015 from .Net process so that I can send commands to the document to create/modify blocks.

I tried both of these approaches but none of them seems to work.

1st approach:

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

2nd approach:

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

In both of the cases I am getting COM exception. Any help?

It's not a duplicate as mentioned in comments, I have tried both approaches mentioned in here.

COM exception -

Retrieving the COM class factory for component with CLSID {0B628DE4-07AD-4284-81CA-5B439F67C5E6} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).


回答1:


I would recommend attempting to get an existing instance of AutoCAD first before creating a new instance each time your application runs.

Creating an instance each time is very expensive.

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;
}



回答2:


Finally I was able to make it run for me. (Posting here so on one had to waste time like I did)

Not sure what was an exact issue though. Strangely, running VS 2013 as normal user worked fine but in case I run it as an administrator, it always fails with above mentioned COM exception.



来源:https://stackoverflow.com/questions/33961411/launch-autocad-2015-from-net-process

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!