大家好,
我正在尝试通过BRX将扩展数据记录附加到实体,但做得不太好
除了所有不同的字符串风格(CString、ACHAR*、char buff[]),要获得有关如何创建结果缓冲区以传递给setXData()方法的信息还有点困难
我正在传递一个计数和两个cstringarray(键和值),以创建一个(私有成员)m_prbX(类型为struct resbuf*)
- Acad::ErrorStatus CadDrawing::setXRecords(int count, const CStringArray& keys, const CStringArray& values)
- {
-
- acdbRegApp(_T("myApp"); //resval.rstring); //rbnext = acutNewRb(_ttoi(LPCTSTR(keys.GetAt(i))));
- m_prbX ->resval.rstring = CStringW(values.GetAt(i)).GetBuffer(0);
- }
-
- m_prbX = m_prbX->rbnext;
- m_prbX->rbnext = NULL;
- acutRelRb(newRB);
-
- m_XDataPending = true;
- return Acad::eOk;
- }
我传递的密钥存储在CStringArray>>中。我转换为INT是否正确_ttoi(LPCTSTR(keys.GetAt(i))
传递值字符串对我来说似乎是一座太远的桥。>>CStringW(values.GetAt(i))。GetBuffer(0)
接下来我尝试设置扩展数据:
- Acad::ErrorStatus CadDrawing::setEntityXRecords()
- {
- Acad::ErrorStatus es = Acad::eOk;
- if (m_XDataPending) //is some Xdata set in m_prxB?
- {
- AcDbObject* pObj;
- AcDbObjectId entID;
- ads_name ename;
- acdbEntLast(ename);
- acdbGetObjectId(entID, ename);
-
- if ((es = acdbOpenObject(pObj, entID, AcDb::kForWrite)) == Acad::eOk) //open object for write succeeds
- {
- if ((es = pObj->setXData(m_prbX)) == Acad::eOk) //..but set Xdata fails with error code 126
- {
- //success..
- }
- es = pObj->close(); //close onbject
- }
-
- acutRelRb(m_prbX); //release the object's memory
-
- m_XDataPending = false;
- }
-
- return es;
- }
SetXData返回126(eRegappIdNotFound)
有人能解释一下吗
TIA,
Arno van Eeuwen
本帖以下内容被隐藏保护;需要你回复后,才能看到! 游客,如果您要查看本帖隐藏内容请 回复 |