如何通过自定义菜单从 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")
我不知道这是否是最佳方法,但我找到了解决此问题的方法,但结果的行为正是我想要的。
在 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")
我不知道这是否是最佳方法,但我找到了解决此问题的方法,但结果的行为正是我想要的。