我什么时候用这个?
线程的奇怪名称没问题,我在一个例程中看到过这些函数,我在Cad的帮助中读过它们,但不够清楚,我无法理解它们。
有人愿意帮我吗。
vlax-make-safearray
vlax-make-variant
非常感谢。
迈克尔 简单回答:您可以在创建可能由双精度数组(safearray)组成的变量数据类型时使用它们-例如,在使用VL创建需要点数组的对象时,可以使用它们,例如LWPolyline或3DPolyline:
在上述代码中,我创建了一个“Array”类型的变体(vlax vbArray),其中包含一个一维双精度数组,对创建的多段线顶点的坐标进行编码。
变量数据类型也用于在静态类型化环境中传递混合数据类型(例如使用扩展数据时)(例如在VB(a)和使用COM互操作的语言中)。LISP非常特别,因为可以有一个包含混合数据类型(字符串、双精度、整数等)的列表,而其他语言要求数组为静态类型,即包含所有相同类型的数据(由于使用的内存分配,不同的数据类型分配的内存量不同)。因此,通过使用可能包含各种数据类型的变体,可以创建变体数组,从而有效地传递混合数据类型数组。
如果您曾经研究过学习较低级别的语言,如C/C++,您会发现可以构造数组,但使用此类数据类型的主要危险之一是,如果您意外超出数组的边界,您可以覆盖存储在数组旁边内存中的任何数据。safearray是“安全的”,因为你不能以这种方式超越界限。
我只谈到了冰山一角,我的帖子并没有那么结构化——VLIDE帮助文档在这方面要好得多。另外,如果其他人认为我的帖子中有错误的信息,请插话,我很高兴为了我自己和其他阅读这篇帖子的人而被纠正。
也可以在这里看到:
http://www.theswamp.org/index.php?topic=31674.0 谢谢李。
我应该在什么时候使用function(vlax make variant),为什么要对其进行安全阵列?是否只用于构建大量坐标点以将其用作顶点?
谢谢
正如我所演示的,要创建变体:
创建vlax vbArray(safearray)类型的变体。
不:
你读过这个吗?
为什么我们要将对象转移到变体?
我是说这有什么好处?
谢谢XXXXXXXXXX
阅读以上帖子^
因为这个主题对我来说是新的,所以指定正确的答案似乎很难。
我应该得到答案吗?
谢谢XXXXX 正如李所解释的那样。。。variant和safearray仅用于与ActiveX对象交互。他们的一些方法和属性将变量和/或数组作为参数,一些方法和属性将变量和/或数组作为结果。AutoLisp没有此类变量类型,因此在使用ActiveX时需要能够创建和转换这些类型。因此你有这些功能。通常,当ActiveX使用数组时,它使用封装在变体中的数组-这就是为什么通常使用数组类型的变体。
您可以继续使用safearray/variant用于任何目的,但通常有一种更简单、更有效的方法使用Lisp的直接类型(String、Integer、Real、List)。没有人阻止你,你也没有理由不这样做。这取决于你。但是当你使用ActiveX时,它有时是你唯一的选择。
有未记录的vlax get、vlax put和vlax invoke函数。这些“通常”会自动在这些类型之间进行转换。E、 g.当获取块参照的属性时,vla GetAttributes将生成包含对象安全数组的变体。但如果使用(vlax invoke…'GetAttributes),它会将其直接转换为对象列表。但是,在某些情况下,这些未记录的函数不能很好地工作,例如使用索引属性。因此,不可能总是不使用安全阵列/变体。 谢谢你irneb先生的澄清。
非常感谢。
页:
[1]