(AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject获取失败有什么办法可以解决
时间: 2024-05-26 10:15:17 浏览: 23
`System.Runtime.InteropServices.Marshal.GetActiveObject` 方法用于获取正在运行的 COM 对象。如果该方法返回 null,则可能是由于没有找到指定的 COM 对象,或者当前用户没有权限访问该对象。
以下是可能的解决方法:
1. 确保指定的 COM 对象已经在运行。如果该对象尚未启动,则需要先启动它。
2. 确保指定的 COM 对象在注册表中正确注册。您可以使用 `regsvr32` 命令重新注册该对象。
3. 确保当前用户有足够的权限访问该对象。如果您正在运行一个服务或者使用一个非管理员账户,那么您可能需要通过管理员账户运行该应用程序。
4. 确保您的代码正确地引用了 COM 对象。您可以检查您的代码并确保您正在使用正确的 ProgID 或 CLSID。
如果您仍然无法解决该问题,可以尝试使用其他方式来访问该对象,例如使用 `System.Activator.CreateInstance` 方法创建该对象的新实例。
相关问题
C# CAD2010 AcadApplication判断"DWG To PDF.pc3"打印机是否正在打印中
要判断“DWG To PDF.pc3”打印机是否正在打印中,可以使用AcadApplication对象的GetSystemVariable方法获取系统变量“DWGTITLED”。如果该变量的值为1,则表示当前有一个打印作业正在进行中。
示例代码如下:
```csharp
using Autodesk.AutoCAD.Interop;
// 获取AcadApplication对象
AcadApplication acadApp = (AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application");
// 获取系统变量DWGTITLED的值
object dwgTitled = acadApp.GetSystemVariable("DWGTITLED");
if ((short)dwgTitled == 1)
{
// "DWG To PDF.pc3"打印机正在打印中
}
else
{
// "DWG To PDF.pc3"打印机没有正在打印中
}
```
需要注意的是,上述代码只能在AutoCAD环境中运行,如果要在外部应用程序中使用AutoCAD的COM接口,需要先将AutoCAD引用添加到项目中,并将“嵌入互操作类型”设置为“是”。
Interop.AutoCAD c# 获取CAD圆心坐标
如果您使用的是Interop.AutoCAD库来与AutoCAD进行成,以下是一个示例代码,演示如何获取CAD中圆的圆心坐标:
```csharp
using System;
using System.Runtime.InteropServices;
using AutoCAD;
public class CadCircleCenter
{
public static void Main()
{
AcadApplication acadApp = null;
AcadDocument acadDoc = null;
try
{
// 启动AutoCAD程序
acadApp = (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application");
acadDoc = acadApp.ActiveDocument;
// 选择圆实体
AcadSelectionSet selectionSet = acadDoc.SelectionSets.Add("CircleSelection");
selectionSet.SelectOnScreen();
// 遍历选择集中的实体
foreach (AcadEntity entity in selectionSet)
{
if (entity.EntityType.Equals(AcEntityType.acCircle))
{
AcadCircle circle = (AcadCircle)entity;
double centerX = circle.Center[0];
double centerY = circle.Center[1];
double centerZ = circle.Center[2];
Console.WriteLine($"Circle center coordinates: X={centerX}, Y={centerY}, Z={centerZ}");
}
}
// 清除选择集
selectionSet.Delete();
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
finally
{
if (acadApp != null)
{
Marshal.ReleaseComObject(acadApp);
}
if (acadDoc != null)
{
Marshal.ReleaseComObject(acadDoc);
}
}
}
}
```
以上代码使用Interop.AutoCAD库来与AutoCAD进行交互。首先,我们通过 `Marshal.GetActiveObject` 方法获取当前活动的AutoCAD应用程序和文档对象。然后,创建一个选择集并让用户在AutoCAD中选择圆实体。接下来,遍历选择集中的实体,找到圆实体并获取其圆心坐标。最后,输出结果到控制台。
请注意,使用Interop.AutoCAD库需要将对应的AutoCAD COM库添加到项目的引用中。此外,您需要在程序运行前确保AutoCAD已经启动,并且至少有一个文档已打开。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)