CAD⽂件加载顺序
CAD⽂件加载顺序:
uacad2006.lsp (AutoCAD使⽤)
< (⽤户⾃定义的*.arx⽂件加载清单)
注:在CAD2006中,由错误提⽰怀疑:*.arx⽂件检测先于acad2006.lsp加载。
uacad.lsp (⽤户⾃定义的Lsp⾃动加载程序)
uacad2006doc.lsp (AutoCAD使⽤)
uacetutil.fas (Express Tools初始化程序)
uacaddoc.lsp (⽤户⾃定义的Lsp⾃动加载程序)
< (⽤户⾃定义或第三⽅编译菜单⽂件)
< (AutoCAD编译菜单⽂件)
< (Express Tools编译菜单⽂件)
u使⽤“对话框⽅式”加载的⽂件
us::startup (⾃动执⾏函数,可⽤于⾃定义状态栏等)
注册表法加载顺序未知。
注意:
1.如果acad.lsp、acaddoc.lsp或MNL⽂件中包含⾃定义函数S::STARTUP,那么,创建新图形或打开现有图形时就会调⽤这个函数。因此,在 LISP启动⽂件中添加S::STARTUP函数定义,就可以执⾏全部所需的安装操作。如果需要关
于“S::STARTUP”函数的详细信息,请参阅“AutoCAD 2000 Customization Guide”的第六章。
2.默认情况下,acad.lsp 仅在启动 AutoCAD 时加载⼀次,⽽ acaddoc.lsp 可随每个⽂档(或图形)⼀起加载。这样可使⽤户将加载 acad.lsp ⽂件和启动应⽤程序相关联,将 acaddoc.lsp ⽂件和⽂档或图形启动相关联。通过更改ACADLSPASDOC 系统变量的设置,可以修改加载这些启动⽂件的默认⽅法。在CAD2006中,第⼀次新建图形时,也会出现对话框询问:acad.lsp是仅在启动 AutoCAD 时加载⼀次,还是随每个⽂档(或图形)⼀起加载。
不同位置的acad.lsp 和acaddoc.lsp按如下顺序加载:
uCAD安装⽬录(即:所在⽂件夹)
u“⽀持⽂件搜索路径”所包含的⽂件夹的逆序加载
uDwg⽂件所在⽂件夹(打开Dwg⽂件时加载)(博主补充:此特性经常被ACAD病毒利⽤!)
有关同名覆盖的问题
同名⽂件被最后加载的版本覆盖。
⽐如:你定义了⼀系列⾃⼰编制的lisp程序并放在acad.lsp⽂件中,但该acad.lsp放在CAD安装⽬录中。当“⽀持⽂件搜索路径”所包含的⽂件夹中,由于未知原因出现了⼀个与你⾃定义的acad.lsp⽂件不同的ac
ad.lsp⽂件时, 你⾃定义的acad.lsp⽂件就不会被加载。解决的办法是将后加载的acad.lsp⽂件删除或⽤⾃⼰定义的acad.lsp替换后加载的acad.lsp⽂件,或将⾃⼰定义的acad.lsp放在更靠后加载的⽬录中。
同名函数(或命令)被最后加载的版本覆盖。
知道AutoCAD 2000启动时各个⽂件加载的顺序,可能就会明⽩⼀个⽂件对另⼀个⽂件的影响。例如,已经在从acad.lsp⽂件加载的LISP程序中定义了⼀个函数,但是在启动AutoCAD 2000后,这个函数却不⼯作。这是因为acaddoc.lsp是在acad.lsp ⽂件之后加载,此函数已经被acaddoc.lsp⽂件重新定义了。
加载的dll⽂件同名但dll⾥的函数不同名,dll不会相互覆盖。
Lisp法
a.在ACAD.EXE所在⽬录加⼊acad.lsp或acaddoc.lsp
acad.lsp或acaddoc.lsp⽂件内容:
(defun S::STARTUP() ;函数名不可以改变
(command "_netload" "my.dll"); my.dll为相对路径也可⽤绝对路径
)
或:(load “1111.lsp”)在1111.lsp⽂件中调⽤my.dll。
b.修改AutoCAD 2006\Support\acad2006.lsp或cad2006doc.lsp⽂件,⾥⾯加⼊加载代码。(加载代码同上。)c.修改你的菜单组对应的同名的MNL⽂件,⾥⾯加⼊加载代码。
MNL⽂件其实是⼀种与菜单同名,扩展名为MNL的LISP⽂件。它随同名菜单加载。
\AutoCAD 2006\R16.2\chs\l
缺点:
a.可能被其他第三⽅程序修改时覆盖。
b.如果使⽤acad.lsp,新建⽂档时出现:“是否读⼊每个图形时都加载“acad.lsp”的提⽰。
对话框⽅式
a。菜单:⼯具->加载应⽤程序,(或⽤命令:_APPLOAD)
b。启动组:“内容”按钮,
c。“添加”按钮
等同于如下注册表操作:
[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.2\ACAD-4001:804\Profiles\<<;未命名配
置>>\Dialogs\Appload\Startup]
"NumStartup"="1"
//启动组加载的项⽬数
"1Startup"="C:\\Program Files\\AutoCAD 2006\\222.lsp"
//数字1表⽰在cad中加载的顺序,后⾯是加载⽂件的路径。
注意:
a.此⽅法在CAD2006以下版本中,只能加载lisp、VBA、arx等,不能加载dll。但可通过lisp间接加载dll。b.此⽅法每次打开⼀个新的⽂档就会⾃动加载启动组中指定的⽂件。
c.(⽹友发⾔)加到启动组⾥⾯有时候不能加载,尤其是打开新图的时候。
注册表法
(注意:检查LOADER的路径是否正确)
在注册表加⼊如下项值:
[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:804\Applications\my] "MANAGED"=dword:00000001
"LOADER"="C:\\Program Files\\AutoCAD 2006\\my.dll"
"LOADCTRLS"=dword:00000002
"DEION"="my"
说明:
a. ⾮托管的ARX程序是指⽤C++编译的以.arx为后缀的动态链接库⽂件;托管的ARX程序是指由程序(C#,C++或VB)编译的以.dll为后缀的动态链接库⽂件。托管的程序和⾮托管的程序相⽐,只要多创建⼀个“MANAGED”键,并设为Ox01,告诉CAD这是托管程序即可。VBA,lisp的注册表加载法参见“2. 对话框⽅式”。
b. 注册表键值"LOADCTRLS"控制说明,控制ARX程序的加载⽅式
0x01:Load the application upon detection of proxy object.
当代理对像被控制时加载相应ARX程序.
0x02:Load the application upon AutoCAD startup.
当AutoCAD启动时加载相应ARX程序.
0x04:Load the application upon invocation of a command.
当输⼊命令时加载相应ARX程序.
0x08:Load the application upon request by the user or another application.
当有⽤户或别的程序请求时加载相应ARX程序.
0x10:Do not load the application.
从不加载该应⽤程序.
0x20:Load the application transparently.
显式加载该应该程序.(不知该项译法是否有误)
c. 当my。dll中有命令时,还需要添加⼀个⼦键:
[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:804\Applications\my\Commands] "StartmyApp"="StartmyApp"
-StartmyApp 是你程序中⼀个有效的命令。
这样,你的程序就会在AutoCAD 启动时加载并初始化。你可以添加代码到程序的如下地⽅(VB.Net代码):
Public Sub StartmyApp()program可以删除吗
.....
End Sub
然后在ACAD.LSP, ACAD.MNL, 或其他⾃动载⼊的⽂件⾥调⽤StartmyApp命令。
优点:只要项键值不同就不会被覆盖,所以建议键名使⽤gid。
⼦进程法、ACAD.RX⽂件法
⼦进程法:
将⼆次开发的程序做成EXE程序。启动该程序会⾃动启动CAD⼦进程,关闭程序时可以关闭CAD⼦进程。
ACAD.RX⽂件法:
在AutoCAD 启动⽂件 中指定待装⼊的ARX 应⽤程序名。 是ASCII ⽂本⽂件,每个ARX 应⽤程序必须单独占⼀⾏,AutoCAD 启动时会⾃动装载该⽂件中的ARX 应⽤程序。另外,应确保$ACAD 路径定义中包括⽂件 的存放⽬录。
配置⽂件法
可以把⾃⼰配置的AUTOCAD启动时加载的东西,保存成⼀个的配置⽂件。然后在AUTOCAD启动快捷⽅式中⽤参数: /p 你的配置⽂件名。这样就可以在启动的时候加载⾃⼰的CAD环境。
具体如下:菜单:⼯具--选项(或⽤命令:_OPTIONS),“配置”选项卡,选择配置⽂件后,点击“输出”。可以输出⼀个扩展名为arg的⽂本⽂件,保存到某个位置,然后再桌⾯上将cad 的快捷⽅式复制⼀个,右键属性,将⽬标中"C:\\My Programs\\Auto CAD\\"的后⾯加上/p "d:/test/test.arg" (注意:双引号,不是汉字的,⽽是英⽂的!)
有些命令要求:将加载的⽂件的路径,加⼊搜索路径。⽅法如下:
加⼊搜索路径:
菜单:⼯具->选项,(或⽤命令:_OPTIONS)
选中“⽀持⽂件搜索路径”,点“添加”,点“浏览”,选择要添加的路径,点“确定”。
等同于如下注册表操作:
注意需要先关闭CAD
[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.2\ACAD-4001:804\Profiles\<<;未命名配置>>\General] "ACAD"="C:\\Documents and Settings\\⽤户名\\Application Data\\Autodesk\\AutoCAD 2006\\R16.2\\chs\\support;C:\\Program Files\\AutoCAD 2006\\support;C:\\Program Files\\AutoCAD 2006\\fonts;C:\\Program Files\\AutoCAD 2006\\help;C:\\Program Files\\AutoCAD 2006\\Express;C:\\Program Files\\AutoCAD 2006\\support\\color;C:\\Program Files\\AutoCAD 2006\\myfile;" 注意:此法每次打开⼀个新的⽂档就会⾃动加载注册表中指定的⽂件。
附:
CAD加载命令:appload (加载VBA,Arx,Lisp), netload(加载dll),arxload(加载Arx),load(加载Lisp),autoload(加载Lisp),autoarxload(加载Arx)
加载⼆次开发线程的⽅法:loadDVB(加载VBA的⽅法)和loadARX(加载ARX的⽅法)
⽤acrxLoadModule() 或AcRxDynamicLinker::loadModule() 函数,在⼀个ARX 应⽤程序⾥装载另⼀个ARX 应⽤程序。这两个函数的原型是:
---- int acrxLoadModule(char * moduleName, int printit);
---- virtual Adesk::Boolean AcRxDynamicLinker::loadModule (char * fileName, int printIt) = 0;
---- 其中各参数含义如下:
---- moduleName:待装载的ARX 应⽤程序名;ARX 应⽤程序扩展名默认为.ARX,如果不是.ARX,则此处char *moduleName 参数必须包括应⽤程序扩展名。
---- fileName:含义与上述moduleName 相同。但是fileName 必须包括待装载的ARX 应⽤程序的路径和扩展名。
---- printit:取0 则不显⽰装载结果,取⾮0 值则显⽰。当printit 取⾮0 值时,如装载成功,则在AutoCAD 命令窗⼝显
⽰“Runtime Extension is already loaded.\",否则,显⽰“AcRxDynamicLinker failed to load \"。
---- acrxLoadModule() 与AcRxDynamicLinker::loadModule 不同的是:acrxLoadModule() 从$ACAD 定义的AutoCAD 搜索路径⾃动搜索待装载的ARX 应⽤程序,并默认ARX 应⽤程序扩展名为.ARX。
int ads_arxload(const char *ArxAppName) 函数。在ADS 或ARX 程序⾥使⽤
该函数可将⼀个ARX 模块装载到相应的ADS 或ARX 程序⾥。该函数的返回值表⽰装载结果。与该函数对应的AutoLISP 函数是(arxload)。
---- ⽤ads_arxload() 和acrxLoadModule() 装⼊⼀个ARX 应⽤程序的区别是:⽤ads_arxload() 装⼊的ARX 应⽤程序不仅注册成⼀个ADS 程序,同时还注册成⼀个ARX 程序。
菜单的加载
AutoCAD启动时将⾃动加载默认的基本菜单⽂件“u ”,其默认路径可在“⼯具→选项→⽂件→⼯作⽀持⽂件搜索路径”中查看。
其中,后缀为mnu的是原始 ASCII 菜单⽂件,mnc是已编译的菜单⽂件,mns是源菜单⽂件。
AutoCAD启动时会在默认路径中按mns→mnc→mnu的顺序依次查,到任何⼀类⽂件都可⽣成mnc⽂件并加载。如这些⽂件均未到,将弹出上述信息窗⼝。按“确定”进⼊AutoCAD后⼯具栏就丢失了,⽽且相应菜单中没有恢复⼯具栏的功能。但此时命令⾏还可以使⽤,只需要输⼊“menu”命令,就会弹出⼀个“选择菜单⽂件”窗⼝,到上述任何⼀类菜单⽂件打开即可恢复⼯具栏。
如果⽂件损坏或被删除,可以从其它AutoCAD运⾏正常的计算机上拷贝⼀个菜单⽂件按同样的⽅法加载。当然还可以把可正常使⽤的菜单⽂件拷贝到默认路径下,这样AutoCAD将⾃动加载⽽不⽤我们⼿动设置,此时可⽤“options”命令进⼊“选项”窗⼝查看默认路径。
在加载⾃定义菜单时,如果通过MENU加载,就会把acad.cui赶跑了。如果想保留acad.cui(CAD默认
菜单),应该⽤MENULOAD来加载(局部加载),这样两个菜单都在,如果不⽤了,也可以通过这个命令来卸载。⽤了之后如果不卸载,退出cad之后下次启动还会加载⾃定义菜单。
怎样在Auto CAD 2006 加载⾃定义菜单⽂件?
问题:我想在Auto CAD 2006 加载⾃定义菜单⽂件,不改变acad.cui的原有菜单只是在其后加⼀栏菜单(在"帮助"菜单POP12后加"⾃定义"菜单POP13)
回答:你可以⽤写字板程序打开acad.MNU⽂件,然后按照其格式把POP13的内容写进去,存盘后,重新启动ACAD就⾏了。如果还不⾏,就在启动ACAD后键⼊命令MENU,然后根据提⽰选择ACAD.MNU。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论