问题
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