乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 45|回复: 2

[ARX]版主、高手进来

[复制链接]

22

主题

54

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
142
发表于 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");
               
}
//-------------------------------------------------
回复

使用道具 举报

0

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
3
发表于 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);}
回复

使用道具 举报

22

主题

54

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
142
发表于 2004-7-21 15:13:00 | 显示全部楼层
谢谢warmrain!添加扩展数据要有一个目标对象,我的目标是appTable啊, appTable->xData是存在的函数啊。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 20:34 , Processed in 0.158775 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表