ObjectARX 应用程序可以通过调用动态分配单个结果缓冲区。调用 to 必须指定要分配的缓冲区类型;自动初始化缓冲区的字段以包含指定的类型代码。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; 设置以防止后续调用 to 尝试再次释放字符串。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-1-8 19:37
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.