CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

相关分类

列表创建和删除

2023-1-1 00:02| 发布者: admin| 查看: 248| 评论: 0|来自: AutoCAD

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); 

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 12:24

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部