明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1444|回复: 5

[提问] 哪些vl函数要用vlax-release-object释放

[复制链接]
发表于 2018-7-24 09:40:03 | 显示全部楼层 |阅读模式
本帖最后由 lostbalance 于 2018-7-24 09:56 编辑

对vl函数不太了解,请教关于vlax-release-object的用法。
以下面这个函数为例:

(defun test (/ a)
        (setq a (vlax-create-object "a"))
        (vlax-release-object a)
)
1. 上面这个a,本身已经作为局部变量了,是否还需要vlax-release-object?
2. 除了vlax-create-object之类,其他还有哪些比较常见的函数也需要vlax-release-object?
3. 补充个问题,如果没有release,(setq a (vlax-create-object "a"))这条执行了多次,那么之前的a怎么release?


"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-7-24 10:53:44 | 显示全部楼层
vlax-release-object这条语句对它管用的,都要释放
 楼主| 发表于 2018-7-24 11:16:35 | 显示全部楼层
自贡黄明儒 发表于 2018-7-24 10:53
vlax-release-object这条语句对它管用的,都要释放

那没有定义符号的中间函数要不要释放,比如
(setq *ACAD*  (vlax-get-acad-object) )
(setq *DOC*   (vla-get-ActiveDocument  (vlax-get-acad-object) ))
以上两句,*acad*是可以释放的,但*DOC*里的(vlax-get-acad-object)要不要释放,专门定义个名称然后释放吗?
发表于 2018-7-24 14:19:14 | 显示全部楼层
你理解有误。什么叫“*DOC*里”的,而是看*DOC*是否需要释放。
 楼主| 发表于 2018-7-24 19:43:59 | 显示全部楼层
自贡黄明儒 发表于 2018-7-24 14:19
你理解有误。什么叫“*DOC*里”的,而是看*DOC*是否需要释放。

不会VB,所以不太理解这部分内容。
我上面问的大概是这个意思,比如下面的DOC,作为局部变量,函数结束,就需要释放DOC。
在setq DOC的过程中,先执行了(vlax-get-acad-object),然后是vla-get-ActiveDocument。那么,vlax-get-acad-object执行产生的VLA对象是自动释放了,还是驻留了。
之所以问这个问题,是因为在研究的过程中,我发现,对于AutoCAD内部的对象,比如(vlax-get-acad-object)之类的值是恒定的,但外部接口的对象,比如(vlax-get-or-create-object "Scripting.FileSystemObject")等,每次获取的值是不一样的。是不是可以认为,不管有没有用setq定义名称,VLA对象都创建了?如果创建了,那没有定义名称的VLA对象怎么进行释放?

(defun test (/ DOC)
        (setq DOC (vla-get-ActiveDocument  (vlax-get-acad-object)))
)
发表于 2021-4-15 09:33:43 | 显示全部楼层
我理解,类似于(setq xx nil)的功能,(vlax-release-object xx)后就是没有xx这个东西了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-16 22:18 , Processed in 0.176377 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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