[ARX]版主、高手进来
关于添加扩展数据时,遇到一个大问题,运行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");
}
//------------------------------------------------- 添加扩展数据要有一个目标对象,你这里没有啊给你个例子
void addXdata() { AcDbObject* pObj = selectObject(AcDb::kForRead);//选择一个对象,如一个圆什么的 if (!pObj) { acutPrintf("Error selecting object\n"); return; } //让用户输入application name 和要添加到xdata中的字符串 char appName, resString; appName = resString = '\0'; acedGetString(NULL, "Enter application name: ", appName); acedGetString(NULL, "Enter string to be added: ", resString); structresbuf*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);} 谢谢warmrain!添加扩展数据要有一个目标对象,我的目标是appTable啊, appTable->xData是存在的函数啊。
页:
[1]