lostbalance 发表于 2018-7-24 09:40:03

哪些vl函数要用vlax-release-object释放

本帖最后由 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这条语句对它管用的,都要释放

lostbalance 发表于 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*是否需要释放。

lostbalance 发表于 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)))
)

wzg356 发表于 2021-4-15 09:33:43

我理解,类似于(setq xx nil)的功能,(vlax-release-object xx)后就是没有xx这个东西了
页: [1]
查看完整版本: 哪些vl函数要用vlax-release-object释放