这就要看你程序运行的机理是什么了,如果程序是用GETOBJECT来取得CAD的应用程序对象的话,这个问题可能是无法解决的,或者我们不知道如何去解决的,但如果你用VC做的程序并不是ARX,那你可能也不能用SENDCOMMAND来发送命令,因为这样就有可能发送到错误的CAD窗口, 但有很多时候,我们用VB或是VC,只是想要它的对话框功能,具体完全可以用VLISP来完成,我一般是用VB做对话框界面,将参数传递给VLISP,来完成相应的功能,(其实VLISP除了不能定义实体外,其他的功能也是很强大的), 但里面也有问题,就是如何加载的问题,我利用了mtexted这个变量,下面是VLISP程序 (Defun Settmptxted(apppath / tmptxt) (Setvar "cmdecho" 0) (If (makeatmpmtext) (Setq tmptxt (entlast)) ) (If (SSget "i") ;(Command"erase" "u" "") (sssetfirst nil nil) ) (Setq *oldtxtedit* (getvar"mtexted")) (Setvar "mtexted" apppath) (Command"ddedit" tmptxt) (Setvar "mtexted" *oldtxtedit*) (Command) (If tmptxt (Entdel tmptxt)) ) 命令运行: (defun c:rou () (if (= nil hloadmmlsp) (loadmmlsp) ) (getdwgname) (setq filn "c:\\mxb\\rough.lsp");路径可以自己设定,rough.exe生成lsp文件时,应使用此路径 (princ "\n正在启动粗糙度生成器,请稍候...") (princ) (settmptxted "c:\\vbcad\\rough.exe");rough。exe是我用VB做的程序,做成模式窗口时,利用了COMMANDDILOG这个API,本来开始用MESSAGEBOX的,但它会嘟一声,没办法改的。 (if (= "bad" (load filn "bad")) (alert "VBCAD已经损坏,请重新安装!\n如果没有关闭VBCAD,请先关闭!") ;(delf filn);删除的时候有点慢,干脆不删 ) (princ) ) 当然,这是在R14时代的程序,现在用VB不用这么麻烦了,直接做ACTIVEX DLL就行了。不过在不能用ACTIVEX DLL的时候,这个问题可真是个大问题。 VC做模式窗口可能比VB要容易,你会VC,不知道上面的思路能不给你一点提示。反正我以前就是这么干的,现在也还在用这么干做的程序,我也懒得去转成DLL版的。
|