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

时间:2018-09-18 07:23:42

标签: vb.net autocad-plugin

在AutoCAD中,我学习了如何通过使用以下宏通过命令来通过“自定义用户界面”创建自定义菜单项:

enter image description here

选择创建的自定义菜单后,将启动“安全性-未签名的可执行文件”对话框:

enter image description here

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

有可能吗?

2 个答案:

答案 0 :(得分:0)

一种解决方法是通过对注册表进行一些调整。

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

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

现在,在“变量”键中,将SECURELOAD的值设置为0。这将禁用安全对话框。

或者,您也可以将C:\ABC添加到您信任的位置(但请注意,我在此方面取得了一些成功-我使用注册表方法)。您可以通过打开AutoCAD手动设置受信任位置,然后转到“选项”->“文件”->“添加到“受信任位置”的路径”。您也可以通过互操作(如果需要)进行同样的操作。

如果要在启动/打开文档时运行dll中定义的命令,最好的方法是将其添加到acad.lsp,acad2015.lsp,acaddoc.lsp等之一。这些脚本在启动时执行应用程序/通过AutoCAD自动打开文档

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

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

这里有一些more information,介绍了使用AutoLisp从dll自动运行命令的情况。

希望有帮助。

答案 1 :(得分:0)

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

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

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

之后,我将宏更改为:

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

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