明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 641|回复: 9

[提问] 关于autolisp和aardio混用时传参的疑问

[复制链接]
发表于 2023-4-17 14:51 | 显示全部楼层 |阅读模式
本帖最后由 1006015131 于 2023-4-17 15:01 编辑

先说下起因。开始是在坛里搜图库意外找到了梁泊全大佬的图库软件。觉得挺好用的,帮助里的超链接http://swjtulbq.ysepan.com/ 是作者的个人主页,里面提到了aardio语言以及和autolisp混用的一些参考源码。
这个图库软件有个优点是可以在不开启cad的情况下也查看图库的内容;也有个缺点是的当同时打开多个cad进程时不能选择需要的那个cad。
因此我个人想通过cad中用autolisp调用aardio的方式来将窗口的句柄传递过去,以正确区分。
为此进行了简单的尝试如下:
首先根据aardio官方文档,此处
  1. (strcat "/hwnd" " "(itoa(vla-get-hwnd(vlax-get-acad-object))))
是可传递到aardio中的参数。在aardio中存在于`_cmdline`中。

此时,可以读取到cad窗口的句柄为`/hwnd 5839396`

后续在aardio用使用论坛大佬的示例也获得相同窗口的句柄,代码如下:

  1. <blockquote>//aardio
复制代码

结果获取的句柄与之前autolisp传递的完全不同。

陷入了困惑。
附件为对应过程源码。

ps:另,问chatgpt有不同的思路,不过暂时不懂怎么用,放出来抛砖引玉。


pss:在网上也查了一种多文件选择方式,也是通过aardio来传递参数。作为附件上传,供大家参考。


本帖子中包含更多资源

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

x
发表于 2023-12-10 20:35 | 显示全部楼层
(strcat "/hwnd" " "(itoa(vla-get-hwnd(vlax-get-acad-object))))这个CAD窗口句柄是怎么传到aardio的,一直搞不明白,我用的是写入注册表或txt,然后用aardio读取CAD句柄
发表于 2023-12-10 20:47 | 显示全部楼层
这种调用一般都是临时的,因为每次开启CAD的hwnd都不一样,没必要写注册表。直接通过DOS的环境变量就可以了。
 楼主| 发表于 2023-12-12 14:09 | 显示全部楼层
yu960312 发表于 2023-12-10 20:35
(strcat "/hwnd" " "(itoa(vla-get-hwnd(vlax-get-acad-object))))这个CAD窗口句柄是怎么传到aardio的, ...

不懂,我猜是放内存了;
你的方法可以实现吗?能不能分享个简单点的代码参考下
 楼主| 发表于 2023-12-12 14:10 | 显示全部楼层
kozmosovia 发表于 2023-12-10 20:47
这种调用一般都是临时的,因为每次开启CAD的hwnd都不一样,没必要写注册表。直接通过DOS的环境变量就可以了 ...

但是这个只能获得一个cad程序的hwnd,同时开启多个CAD,例如在分屏场景就会有问题了
发表于 2023-12-12 15:09 | 显示全部楼层
1006015131 发表于 2023-12-12 14:10
但是这个只能获得一个cad程序的hwnd,同时开启多个CAD,例如在分屏场景就会有问题了

说得好像用注册表就没有多开CAD的问题了
发表于 2023-12-12 21:39 | 显示全部楼层
1006015131 发表于 2023-12-12 14:09
不懂,我猜是放内存了;
你的方法可以实现吗?能不能分享个简单点的代码参考下

我是用CAD lisp调用aardio生成的exe文件,做了个工具箱面板,不是aardio调用cad,所以我只需要把CAD窗口句柄传递给exe就行了
发表于 2023-12-12 21:44 | 显示全部楼层
1006015131 发表于 2023-12-12 14:10
但是这个只能获得一个cad程序的hwnd,同时开启多个CAD,例如在分屏场景就会有问题了
你aardio里面是如何获取到lisp传递过去的窗口句柄的?

本帖子中包含更多资源

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

x
发表于 2023-12-12 22:01 | 显示全部楼层
yu960312 发表于 2023-12-12 21:44
你aardio里面是如何获取到lisp传递过去的窗口句柄的?

看了你的工程文件,知道了如何把CAD窗口句柄传给aardio了
发表于 2023-12-12 22:10 | 显示全部楼层
1006015131 发表于 2023-12-12 14:09
不懂,我猜是放内存了;
你的方法可以实现吗?能不能分享个简单点的代码参考下

好家伙,折腾了半天原来简单
lisp: (startapp "D:\\ATool.exe" (itoa(vla-get-hwnd(vlax-get-acad-object))))
aardio: hwnd = _CMDLINE;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 16:13 , Processed in 0.194317 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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