2

我正在开发一个使用 .NET 4.6 程序集的 AutoCAD 插件。我发现开发过程非常令人沮丧;API 非常大,除了入门之外的文档到处都是,很难找到。完成任何事情的唯一方法似乎就是在 Visual Studio 中制作原型函数并查看它是否有效。然后需要几分钟来加载 AutoCAD 并附加一个调试器,这破坏了我的原型设计工作流程。

如果我可以使用 Linqpad 之类的东西来对我的应用程序进行原型制作,那将非常方便,这样我就可以找到我正在寻找的数据。我不同意使用 Linqpad 的想法。但是,如果有另一种我想念的技术,我很想听听。

我不确定这是否是我可以通过专业版实现的目标,但由于没有试用版,我无法找到。

4

2 回答 2

4

确实,API 确实很大,而且某些功能的文档记录也很差。我发现上手很困难,但是一旦我熟悉了核心概念和功能,我就开始非常喜欢使用它,因为 API 非常强大且一旦“掌握”就易于使用。我不确定您检查了哪些来源,但我从这个 Developer Documentation开始。向下滚动到培训实验室。我建议您至少通读 ObjectARX 和 .NET 培训实验室。花几天时间在 .NET 实验室工作,因为它会为您节省无数小时。

至于调试,下面的设置应该为您提供最有效和最高效的方法(这里我使用 VS 2015 和 AutoCad 2015)。在项目属性中,在“调试”选项卡下,您的设置应如下所示:

  1. 选中“启动外部程序:”并输入 AutoCad 可执行文件的路径。这适用于其他版本的 AutoCad。
  2. 在“命令行参数:”字段中,输入/nologo. 这将显着加快 AutoCad 的启动速度。

在此处输入图像描述

要将您的 dll 自动加载到 AutoCad中,您可以通过注册表(我的首选方式)或通过 acad20xxdoc.lsp 或 acad.lsp 来完成(AutoCad 将默认为您打开的每个文档或 AutoCad 启动时分别运行这些脚本)。您可以在这篇文章中找到详细信息。

现在按F5将启动 AutoCad 并加载调试器。您现在可以像处理任何其他代码一样单步执行代码行。在代码的开头放置一个断点,然后在 AutoCad 中执行您的命令。你的断点应该被击中。

另外: /nologo也可以添加到 AutoCad 的桌面快捷方式,为用户加速 AutoCad。它可以添加到快捷方式属性中的“目标:”字段中。IE"C:\Program Files\Autodesk\AutoCAD 2015\acad.exe" /nologo

注意:一个可能的问题!确保您的项目引用的任何 AutoCad dll 的属性设置为:

  1. 嵌入互操作类型 -> False
  2. 复制本地 -> 错误。还要确保acmgd.dll在您的 Debug/Release 目录中没有 AutoCAD dll(即或任何名称以“ac”开头的 dll)。删除您找到的任何内容。不这样做会导致难以追查的错误和崩溃。
于 2017-10-23T19:55:01.020 回答
1

/b您可以在调试时运行脚本以使用命令行开关NETLOAD 您的 DLL 。

在 Visual Studio 的命令行参数文本框中已有内容的末尾添加如下内容

/b "C:\Path\To\Script\AutoNetLoadDebug.scr"

调用的脚本AutoNetLoadDebug.scr内容类似于

netload "C:\Path\To\Dll\Your.dll"

注意:该行的末尾需要一个换行符,以便它实际运行命令。确保您没有将 AutoCAD 设置为已经加载该 DLL 或它的不同版本。如果这样做,请使用/p命令行开关以不同的配置文件启动 AutoCAD。

您无法在 AutoCAD 之外从 AutoCAD API 运行任何东西,.NET DLL 只是 AutoCAD 内部深处的非托管代码的映射

我做了很多日志记录(Serilog),尤其是在调试中。Github 和https://github.com/wtertinek/AcadTestRunner上也有CADtest。我曾尝试模拟 AutoCAD API。一次。因此,CADtest。

Protip:到处尝试捕捉并注意空值,但您可能已经发现了这一点。

阅读AutoCAD Tag wiki并查看其中提到的其他论坛和博客,它们是 AutoCAD API 知识的金矿

于 2017-10-24T01:14:30.223 回答