请教个问题:ARX中可以加载LSP、FAS或VLX文件吗?如何加载?
请教个问题:ARX中可以加载LSP、FAS或VLX文件吗?如何加载?我的想法是:ARX随着CAD启动,其它的LSP程序由ARX按需加载。
除了用sendcommand之外,还有没有其它更好的办法?
望明经的高手赐教!! tengte 发表于 2015-8-17 17:51
果然,ads_queueexpr最好用,命令行没有回显(程序中的输出信息除外),不受当前文档的限制。
比SendStr ...
百度搜索manusoft,国外的owen有lspload,就是自动加载lsp的 acedInvoke/acedCmd /acedCommand 三个函数都可以实现加载Lisp文件!
菡萏 发表于 2015-8-11 16:26 static/image/common/back.gif
acedInvoke/acedCmd /acedCommand 三个函数都可以实现加载Lisp文件!
谢谢你的回复!请给我一个例子好吗?它们分别执行什么函数或命令呢?
因为我用acedInvoke执行Load时,总是失败。查了文档,这种方式只能调用C:xx的AutoLisp函数。 http://www.xdcad.net/forum/thread-54606-1-1.html 百度的。不知道效果如何
ObjectARX调用LISP方法(含参数传递)返回值
发表于 2014 年 3 月 31 日 由 boitboy
//acrxEntryPoint.cpp
void Test()
{
struct resbuf *ptList,*ptResult=NULL;
//注意,一定要写成_T("c:lisp_test"),写成"c:lisp_test"调用会失败
double dx=135.6;
double dy=147.5;
ptList=acutBuildList(RTSTR,_T("c:lisp_test"),RTREAL,dx,RTREAL,dy,RTNONE);
int rc=acedInvoke(ptList,&ptResult);
if(rc!=RTNORM)
{
acutPrintf(_T("\r\n调用LISP失败,请检查依赖的LISP是否加载"));
acutRelRb(ptList);
return;
}
acutRelRb(ptList);
if(ptResult==NULL)
{
acutPrintf(_T("\r\n调用LISP失败,返回空值"));
return;
}
if(ptResult->restype!=RTSTR)
{
acutPrintf(_T("\r\n调用LISP失败,返回错误的值类型"));
acutRelRb(ptResult);
return;
}
CString strRC=ptResult->resval.rstring;
acutRelRb(ptResult);
acutPrintf(_T("\r\n返回值:%s"),strRC);
}
//-----------------------------------------------------------------------------
//----- ObjectARX EntryPoint
class CInvokeLispTestApp : public AcRxArxApp {
public:
CInvokeLispTestApp () : AcRxArxApp () {}
virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
// TODO: Load dependencies here
// You *must* call On_kInitAppMsg here
AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;
acedRegCmds->addCommand(_T("InvokeLispTestApp"),_T("Test"),_T("Test"),0,Test);
// TODO: Add your initialization code here
return (retCode) ;
}
virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
// TODO: Add your code here
// You *must* call On_kUnloadAppMsg here
AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;
// TODO: Unload dependencies here
acedRegCmds->removeGroup(_T("InvokeLispTestApp"));
return (retCode) ;
}
virtual void RegisterServerComponents () {
}
} ;
//-----------------------------------------------------------------------------
IMPLEMENT_ARX_ENTRYPOINT(CInvokeLispTestApp)
//InvokeLispTest.lsp
;;定义函数lisp_test
;;函数有两个参数x,y
;;函数名必须写成c:xx否则ARX无法调用
(defun c:lisp_test(x y)
;;将X转换成字符串
(setq strX(rtos x 2 10))
;;将Y转换成字符串
(setq strY(rtos y 2 10))
;;将X,Y转换的字符串合并起来,并返回给ARX函数
;;返回给ARX调用
;;LISP最后一个运算的返回值做为函数的返回值
(setq strXY(strcat strX "|" strY))
) 434939575 发表于 2015-8-12 10:08 static/image/common/back.gif
http://www.xdcad.net/forum/thread-54606-1-1.html 百度的。不知道效果如何
ObjectARX调用LISP ...
谢谢434939575 的回复!
ARX调用LISP这种我知道,现在我是想从ARX中加载LISP程序,也就是调用之前,需要先加载。
不知道有没有好的方法!
现在我已经用acedPostCommand和SendMessage发送文字到命令行实现了,但是命令行会出现发送的文字,感觉不太“和谐”,不知道有没有“安静”的方法? tengte 发表于 2015-8-12 10:28 static/image/common/back.gif
谢谢434939575 的回复!
ARX调用LISP这种我知道,现在我是想从ARX中加载LISP程序,也就是调用之前,需要 ...
Arx提供的Lisp函数(load Path)
在ArxObject中 应该是有原型函数的.
实在不行,你调用Lisp函数 调用Load 就OK了 鱼与熊掌 发表于 2015-8-13 10:40 static/image/common/back.gif
Arx提供的Lisp函数(load Path)
在ArxObject中 应该是有原型函数的.
实在不行,你调用Lisp函数 调用Load...
谢谢你的回复!
首先没有找到原型函数。
ARX中只能调用C:xxx和用vl-acad-defun定义的LISP函数,LOAD是不能直接用acedCmd调用的。
不过,现在我已经解决了这个问题,用的SendStringToExecute。 tengte 发表于 2015-8-14 10:49 static/image/common/back.gif
谢谢你的回复!
首先没有找到原型函数。
ARX中只能调用C:xxx和用vl-acad-defun定义的LISP函数,LOAD是不 ...
你可以在调用前 调用vl-acad-defun注册他 就解决了. 本帖最后由 tengte 于 2015-8-14 11:35 编辑
鱼与熊掌 发表于 2015-8-14 10:51 static/image/common/back.gif
你可以在调用前 调用vl-acad-defun注册他 就解决了.vl-acad-defun是LSP中的函数,ARX不能直接调用的,只能在LSP中调用。
LSP都没有加载,怎么调用得了呢?
我是想用ARX加载LSP,这是执行LSP的第一步。 int ret=ads_queueexpr(_T("(load \"c:/test.lsp\")"));
if (RTNORM==ret)
{
acutPrintf(_T("\n加载成功..."));
}
else
{
acutPrintf(_T("\n加载失败..."));
}
页:
[1]
2