除了上一篇中提到的用.NET程序实现的方法外,另一种用LISP加载.NET的程序集的方法由来已久。思路是用lisp语言程序化调用“Netload”命令,代码也比较简单,速度也还可以,示例如下:
(defun c:LOADNET() (command "netload" "E:/documents/DotNetFile.dll") (command "LOADNET") (princ) )
如果要加载的*.dll文件中正好也有一个名为"LOADNET"的目标命令,那么当第一次输入"LOADNET"命令时,程序会先netload那个dll文件,然后执行其中定义的"LOADNET"目标命令;接下来再输入"LOADNET"命令时,程序会“忽略”lisp的命令,进而执行dll文件中定义的"LOADNET"目标命令。这从表面看起来有点儿像“唤醒加载”,其实偶感觉每运行一次命令,CAD都要加载一次dll程序集,还是有差别的。
小结一下:
(1)这两种加载方法都可以实现dll程序的批量后台加载; (2)这两种加载方法在执行之前都要先加载原始的命令文件(第一种要加载主dll程序,第二种要先加载一下主lisp程序); (3)这两种方法加载后的dll程序同样无法进行“卸载”,直到你关了AutoCAD; (4)相比较来讲,偶更倾向于用注册表来控制.NET程序集的加载,因为反正无法卸载,还不如我一开始都把文件给加载全了,而且通过注册表还可以实现真正的“唤醒加载”方式。 |