从 .Net 进程启动 AutoCAD 2015
Launch AutoCAD 2015 from .Net process
我试图从 .Net 进程加载 AutoCAD 2015,以便我可以将文档命令发送到 create/modify 个块。
我尝试了这两种方法,但 none 似乎有效。
第一种方法:
AcadApplication app = new AcadApplication();
app.Visible = true;
第二种方法:
var t = Type.GetTypeFromProgID("AutoCAD.Application", true);
dynamic obj = Activator.CreateInstance(t, true);
在这两种情况下,我都遇到了 COM 异常。有帮助吗?
这不是评论中提到的重复,我已经尝试了here中提到的两种方法。
COM 异常 -
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)).
我终于能够 运行 了。 (发到这里只好像我一样浪费时间)
但不确定确切的问题是什么。奇怪的是,运行ning VS 2013 作为普通用户工作正常,但如果我 运行 作为管理员,它总是失败并出现上述 COM 异常。
我建议您在每次运行应用程序时先尝试获取现有的 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;
}
我试图从 .Net 进程加载 AutoCAD 2015,以便我可以将文档命令发送到 create/modify 个块。
我尝试了这两种方法,但 none 似乎有效。
第一种方法:
AcadApplication app = new AcadApplication();
app.Visible = true;
第二种方法:
var t = Type.GetTypeFromProgID("AutoCAD.Application", true);
dynamic obj = Activator.CreateInstance(t, true);
在这两种情况下,我都遇到了 COM 异常。有帮助吗?
这不是评论中提到的重复,我已经尝试了here中提到的两种方法。
COM 异常 -
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)).
我终于能够 运行 了。 (发到这里只好像我一样浪费时间)
但不确定确切的问题是什么。奇怪的是,运行ning VS 2013 作为普通用户工作正常,但如果我 运行 作为管理员,它总是失败并出现上述 COM 异常。
我建议您在每次运行应用程序时先尝试获取现有的 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;
}