添加扩展数据
大家好,我正在尝试通过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
**** Hidden Message ***** 看起来不像您检查xdata应用程序名称是否已在应用程序字典中注册
请参见帮助文档中的“acdbRegApp()”。 这有效
static bool GetEnt(AcDbObjectId &id, AcGePoint3d &pnt)
{
ads_name name = {0L, 0L};
bool flag = (acedEntSel(L"\nGet Entity",name,asDblArray(pnt)) == RTNORM);
id = (AcDbStub*)name;
return flag;
}
static void CStringArrayToResbulList(ResbufList &rList,
const INT_PTR count,
const CStringArray& keys,
const CStringArray& values)
{
if(count setXData(rList)));
}
} ;
如果你想使用它
,你可以在这里得到 resbuflist 类
另请查看_tcsdup代码3] 当您调用acutRelRb(newRB)时,您正在释放指向我的m_prbX的内存。 感谢您的快速回复。
ResbufList看起来非常有用且很有前途,我已经下载了它并在代码中实现了它。
但是,
一旦我尝试构建代码,我就收到错误1189
错误6致命错误C1189:#error:您已经包含了一些C++ / C库头文件,其中定义了_DEBUG,有些_DEBUG未定义。这将无法正常工作。请始终如一地设置或清除_DEBUG。c:\program files\microsoft visual studio 8\vc\include\use_ansi.h 49
在 Bricscad 知识库中也提到了这个错误,并建议了一种改变 stdafx.h 的方法。但我已经在我现有的项目中做到了这一点。
将 ResbufList.cpp添加到我的项目中会导致弹出错误。
所以现在正在寻找一种方法来解决这个问题,因为C++仍然不是我的一杯茶,特别是这种错误。
会让你随时了解情况。
您的项目中是否设置了_ DEBUG
我认为您无法做到这一点,因为BRX链接到MFC的发布版本。。。 是的,
也许你可以定义自己的,即MY_DEBUG你的调试代码。 我的手提箱已经收拾好了等着。。。 我有机票,但我还没有预订房间,也许我应该留在最近的酒吧,
我带着空行李箱,这样我就可以带回巧克力
了。
页:
[1]
2