明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1908|回复: 2

[ARX]版主、高手进来

[复制链接]
发表于 2004-7-21 14:06:00 | 显示全部楼层 |阅读模式
关于添加扩展数据时,遇到一个大问题,运行addXData() 时打印出:ERROR: could not set Data :eRegappIdNotFound ,没能把数据添加,怎么办呢? (If any of the regappNames in xdata are not in the APPID table, then Acad::eRegappIdNotFound is returned
说明我们注册appName不成功 ?acdbRegApp(appName);可能不成功,它返回的是一个数字,-5001 ) //--------------
void addXData()
{
Acad::ErrorStatus es;
struct resbuf *pRb, *pTemp;
AcDbSymbolTable * appTable; char * appName="Test"; char * resString="abcdefgffff"; AcDbDatabase *pDb=acdbHostApplicationServices()->workingDatabase(); pDb->getRegAppTable(appTable,AcDb::kForWrite); pRb = appTable->xData(appName); if (pRb == NULL)
{
acdbRegApp(appName);
pRb = acutNewRb(AcDb::kDxfRegAppName); pTemp = pRb;
pTemp->resval.rstring = (char*) malloc(strlen(appName) + 1);
strcpy(pTemp->resval.rstring, appName);

}
else
{
for (pTemp = pRb; pTemp->rbnext != NULL;
pTemp = pTemp->rbnext)
{ ; }

acutPrintf("pRb != NULL\n");
}

pTemp->rbnext = acutNewRb(AcDb::kDxfXdAsciiString);
pTemp = pTemp->rbnext;
pTemp->resval.rstring
= (char*) malloc(strlen(resString) + 1);
strcpy(pTemp->resval.rstring, resString); appTable->upgradeOpen();
es=appTable->setXData(pRb);
acutPrintf(_T("\n ERROR: could not set Data (%s)\n"),acadErrorStatusText(es));

appTable->close();   acutRelRb(pRb);   acutPrintf("add data is ok\n");

} //-------------------------------------------------
发表于 2004-7-21 14:45:00 | 显示全部楼层
添加扩展数据要有一个目标对象,你这里没有啊给你个例子 void
addXdata() 
{
    AcDbObject* pObj = selectObject(AcDb::kForRead);//选择一个对象,如一个圆什么的
    if (!pObj) {
        acutPrintf("Error selecting object\n");
        return;
    }
     //让用户输入application name 和要添加到xdata中的字符串
    char appName[132], resString[200];
    appName[0] = resString[0] = '\0';
    acedGetString(NULL, "Enter application name: ",
        appName);
    acedGetString(NULL, "Enter string to be added: ",
        resString);
    
    struct  resbuf  *pRb, *pTemp;
    
    pRb = pObj->xData(appName);
    if (pRb != NULL) {
        // 如果 xdata 存在,就找到扩展数据的尾部
        for (pTemp = pRb; pTemp->rbnext != NULL;
                pTemp = pTemp->rbnext)
                { ; }
    } else {
        // xdata 不存在,就注册 appName 
       acdbRegApp(appName);
        pRb = acutNewRb(AcDb::kDxfRegAppName);
        pTemp = pRb;
        pTemp->resval.rstring
            = (char*) malloc(strlen(appName) + 1);
        strcpy(pTemp->resval.rstring, appName);
    }
    // 添加用户输入的字符串到xdata.
    pTemp->rbnext = acutNewRb(AcDb::kDxfXdAsciiString);
    pTemp = pTemp->rbnext;
    pTemp->resval.rstring
        = (char*) malloc(strlen(resString) + 1);
    strcpy(pTemp->resval.rstring, resString);
    pObj->upgradeOpen();
    pObj->setXData(pRb);
    
    pObj->close();
    acutRelRb(pRb);
}
 楼主| 发表于 2004-7-21 15:13:00 | 显示全部楼层
谢谢warmrain!添加扩展数据要有一个目标对象,我的目标是appTable啊, appTable->xData是存在的函数啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 06:45 , Processed in 0.146396 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表