如何通过自定义菜单从 AutoCAD 中的 DLL 调用函数?

How to call a function from a DLL in AutoCAD via custom menu?

在 AutoCAD 中,我学习了如何通过自定义用户界面制作自定义菜单项,方法是使用以下宏发出命令:

选择创建的自定义菜单后,将启动一个 "Security - Unsigned Executable File" 对话框:

如何编写命令,在选择自定义菜单并选择 [加载一次] 后调用 DLL 中的函数?

这可能吗?

解决这个问题的一种方法是在注册表中进行一些小调整。

通过在 Windows 搜索中键入 "RegEdit" 打开注册表编辑器。导航到以下键(我使用的是 AutoCAD 2015,因此请找到您使用的版本)。

HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R20.0\ACAD-E005:409\Profiles\<<YourProfile>>\Variables

现在在 "Variables" 键中,将 SECURELOAD 值设置为 0。这将禁用安全对话框。

或者,您可以将 C:\ABC 添加到您信任的位置(但不可否认,我在这方面取得了成功 - 我使用注册表方法)。您可以通过打开 AutoCAD 手动设置受信任的位置,转到选项 -> 文件 -> 添加路径到 "Trusted Locations"。您也可以通过互操作执行相同操作(如果需要)。

如果你想 运行 在 startup/doc 打开你的 dll 中定义的命令,最好的方法是将它添加到 acad.lsp、acad2015.lsp 之一, acaddoc.lsp, 等 这些脚本在AutoCAD

自动启动app/opening文档时执行

您还可以使用这些 lisp 文件之一来加载您的 dll(与编写宏相反)。例如,这可能会做到这一点:

(COMMAND "NETLOAD" "C:\ABC\VbXyz.dll")
(COMMAND "MyCommandToRun")

这里有一些 more information 关于使用 AutoLisp 从 dll 自动 运行 命令的内容。

希望对您有所帮助。

在我的 VB.NET 代码中,我在要调用的函数之前添加了一个命令属性。

<CommandMethod("DOSOMETHING", CommandFlags.UsePickSet)>
Public Sub DoSomething()
...
...
End Sub

这使得可以通过在 AutoCAD 命令行中键入 DOSOMETHING 来调用函数。

之后,我将宏更改为:

^C^C^P(command "_netload" "C:/ABC/VbXyz.dll");(command "DOSOMETHING")

我不知道这是否是最佳方法,但我找到了解决此问题的方法,但结果的行为正是我想要的。