列表创建和删除
ObjectARX 应用程序可以通过调用 来动态分配单个结果缓冲区。对的调用必须指定要分配的缓冲区类型; 自动初始化缓冲区的字段以包含指定的类型代码。acutNewRb()acutNewRb()acutNewRb()restype 以下示例代码片段分配一个结果缓冲区以包含三维点,然后初始化点值: struct resbuf *head; if ((head=acutNewRb(RT3DPOINT)) == NULL) { acdbFail("Unable to allocate buffer\n"); return BAD; } head->resval.rpoint[X] = 15.0; head->resval.rpoint[Y] = 16.0; head->resval.rpoint[Z] = 11.18; 如果新的结果缓冲区要包含字符串,则应用程序必须显式分配内存以包含字符串: struct resbuf *head; if ((head=acutNewRb(RTSTR)) == NULL) { acdbFail("Unable to allocate buffer\n"); return BAD; } if ((head->resval.rstring = malloc(14)) == NULL) { acdbFail("Unable to allocate string\n"); return BAD; } strcpy(head->resval.rstring, "Hello, there."); 为链接到动态列表的字符串分配的内存在释放列表时释放,因此以下调用释放上一示例中分配的所有内存:
acutRelRb(head); 若要在不释放缓冲区的情况下释放字符串,请调用字符串指针并将其设置为,如以下示例所示:free()NULL free(head->resval.rstring); head->resval.rstring = NULL; 设置为防止后续调用再次尝试释放字符串。resval.rstringNULLacutRelRb() 如果列表的元素是事先已知的,则构造它的更快方法是调用 ,它采用可变数量的参数对(有 、 、 等例外),并返回指向结果缓冲区列表的指针,该列表包含指定的类型和值,并按照它们传递到的顺序链接在一起。此函数根据需要分配内存并初始化所有值。最后一个参数必须是值为零或 的单个参数。acutBuildList()RTLBRTLE-3acutBuildList()acutBuildList()RTNONE 下面的示例代码片段构造一个由三个结果缓冲区组成的列表。它们按以下顺序包含一个实际值、一个字符串和一个点: struct resbuf *result; ads_point pt1 = {1.0, 2.0, 5.1}; result = acutBuildList( RTREAL, 3.5, RTSTR, "Hello, there.", RT3DPOINT, pt1, 0 ); 如果无法构造列表,则返回 ;否则,它将分配空间来包含列表。此列表必须通过后续调用来释放:acutBuildList()NULLacutRelRb() if (result != NULL) acutRelRb(result); 父主题: |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-5-13 10:55
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.