明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1027|回复: 13

[讨论] 诡异的无法运行

[复制链接]
发表于 2020-7-8 09:47:58 | 显示全部楼层 |阅读模式
本帖最后由 nyistjz 于 2020-7-8 11:49 编辑

如附件,是修改和编写的一个小程序,拖入绘图界面或者AP加载时,无法正常加载DLL文件 ,而把命令复制进命令中时又是可以下载加载的。
请高手帮忙看一下,到底是哪里出了问题,感谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-7-8 11:02:29 | 显示全部楼层
这并不诡异哈。。。
(load (strcat *fstl_dir* "\\2013++.dll") "加载失败!!!")
其中load函数只给定要加载的文件名时,如果加载失败会返回错误,程序中断
但后边再加一个参数时,当加载失败会直接返回load函数的第二个参数,程序不会出错
但为什么单独运行它会显示"加载失败!!!",而在程序中却无显示呢?
因为load只会返回加载情况这么一个结果,而并不是象princ之类的直接输出到控制台或命令行
比如它前边一句(setq *fstl_dir* 。。。。)单独运行它会返回一个路径,但在程序里边它为什么同样没有返回呢?同时楼主为什么又没疑惑它的前边任何一个语句呢?
函数它只返回最后被运行那个语句的结果,其它的均不会作为结果返回,因为事情还没结束嘛
比如函数最后一句是(setq a 3)会返回3并且能看到,但是后边再加一句呢,这个3就不会返回来,只会返回它下边一句的运行结果
发表于 2020-7-8 10:34:21 | 显示全部楼层
单独在命令行运行(load (strcat *fstl_dir* "\\2013++.dll") "加载失败!!!"),你看到的提示是load函数的返回值,如果后面加一句(princ),你就看不到了。
也就是说,通常我们所看到的,不是用princ、prin1函数打印在命令行的内容,只是函数返回值,lisp语言特性导致语句运行完之后会返回最后一个表达式的值。
发表于 2020-7-8 13:17:51 | 显示全部楼层
nyistjz 发表于 2020-7-8 12:27
我修改之后,是用这个来加载的,但是还是有问题,找不到问题出在哪里!
(command "netload" file)

CAD2016,加载2013的dll,显示如下:

输入 Taskbar 的新值 <0>: 0
命令: myui命令已经成功加载!!!

应该是成功了吧,你的问题是什么
发表于 2020-7-8 10:36:47 | 显示全部楼层
大概改一下,比如(if (= (load (strcat *fstl_dir* "\\2013++.dll") "加载失败!!!") "加载失败!!!") (princ "加载失败!!!"))就肯定可以打印到命令行了
 楼主| 发表于 2020-7-8 11:50:54 | 显示全部楼层
llsheng_73 发表于 2020-7-8 11:02
这并不诡异哈。。。
(load (strcat *fstl_dir* "\\2013++.dll") "加载失败!!!")
其中load函数只给定要加 ...

不好意思,是我之前的问题写的有问题,我又修改了一下,还烦请您看一下问题出在哪里,感谢!
无法正常加载DLL文件
 楼主| 发表于 2020-7-8 11:51:43 | 显示全部楼层
satan421 发表于 2020-7-8 10:36
大概改一下,比如(if (= (load (strcat *fstl_dir* "\\2013++.dll") "加载失败!!!") "加载失败!!!") (princ ...

是我之前的问题说的有问题,在1楼又修改了一下,还烦请您再看一下,谢谢!
发表于 2020-7-8 11:59:05 | 显示全部楼层
nyistjz 发表于 2020-7-8 11:51
是我之前的问题说的有问题,在1楼又修改了一下,还烦请您再看一下,谢谢!

load函数应该只能加载vlx、fas、lsp文件吧,dll?貌似不能
 楼主| 发表于 2020-7-8 12:27:22 | 显示全部楼层
satan421 发表于 2020-7-8 11:59
load函数应该只能加载vlx、fas、lsp文件吧,dll?貌似不能

我修改之后,是用这个来加载的,但是还是有问题,找不到问题出在哪里!
(command "netload" file)
 楼主| 发表于 2020-7-8 13:23:30 | 显示全部楼层
satan421 发表于 2020-7-8 13:17
CAD2016,加载2013的dll,显示如下:

输入 Taskbar 的新值 : 0

我在1楼中有讲过,是DLL文件不能加载。
1
1
1
提示成功,是说明LSP文件加载成功,不是DLL文件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-17 21:14 , Processed in 0.213809 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表