评估外部函数
定义外部函数后,AutoLISP 可以通过请求调用它。当 ObjectARX 应用程序收到此请求时,它通过调用 来检索外部函数的整数代码。然后,switch 语句、if 语句或函数调用表可以选择并调用指定的函数处理程序。这是 ObjectARX 应用程序定义的用于实现外部函数的函数。请注意,处理程序的名称和 AutoLISP 定义的名称(因此可以识别)不一定是同一个名称。kInvkSubrMsgacedGetFunCode()acedDefun() 如果函数处理程序需要参数,则可以通过调用 来检索其值,这将返回指向包含从 AutoLISP 传递的值的结果缓冲区链表的指针。如果处理程序不需要任何参数,则不需要调用(无论如何它都可以调用,以验证是否没有传递任何参数)。由于函数处理程序从链表中检索其参数,因此还可以实现可变长度参数列表或不同的参数类型。acedGetArgs()acedGetArgs() 注意:
函数处理程序必须验证传递给它的参数的数量和类型,因为无法告诉 AutoLISP 要求是什么。 可以编写需要参数的函数处理程序,以便在返回参数列表时提示用户输入值。此技术通常应用于定义为 AutoCAD 命令的外部功能。acedGetArgs()NULL 一组称为值返回函数的 ObjectARX 函数(如 、 和 )使外部函数能够将值返回给调用它的 AutoLISP 表达式。acedRetInt()acedRetReal()acedRetPoint() 在外部函数和 AutoLISP 之间传递的参数的计算结果必须为以下类型之一:整数、实数(浮点数)、字符串、点(在 AutoLISP 中表示为两个或三个实值的列表)、实体名称、选择集名称、AutoLISP 符号和 ,或包含前面元素的列表。除 和 之外的 AutoLISP 符号不会传递给外部函数或从外部函数传递,但 ObjectARX 应用程序可以通过调用 和 来检索和设置 AutoLISP 符号的值。tniltnilacedGetSym()acedPutSym() 例如,如果 ObjectARX 应用程序中的外部函数是使用字符串、整数和实数参数调用的,则此类函数的 AutoLISP 版本可以表示如下: (doitagain pstr iarg rarg) 假设该函数已定义为 ,AutoCAD 用户可以使用以下表达式调用该函数:acedDefun() 命令:(doitagain “起始宽度为” 3 7.12) 此调用为函数的字符串、整数和实数参数提供值,函数处理程序通过调用 来检索这些值。有关以这种方式检索参数的示例,请参阅列表和其他动态分配数据中的第一个示例。doitagain()acedGetArgs() |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2024-12-15 22:06
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.