乐筑天下

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

添加扩展数据

[复制链接]

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-9-14 08:20:42 | 显示全部楼层 |阅读模式
大家好,
我正在尝试通过BRX将扩展数据记录附加到实体,但做得不太好
除了所有不同的字符串风格(CString、ACHAR*、char buff[]),要获得有关如何创建结果缓冲区以传递给setXData()方法的信息还有点困难
我正在传递一个计数和两个cstringarray(键和值),以创建一个(私有成员)m_prbX(类型为struct resbuf*)
  1. Acad::ErrorStatus CadDrawing::setXRecords(int count, const CStringArray& keys, const CStringArray& values)
  2. {
  3.    
  4.    acdbRegApp(_T("myApp");  //resval.rstring); //rbnext = acutNewRb(_ttoi(LPCTSTR(keys.GetAt(i))));
  5.      m_prbX ->resval.rstring = CStringW(values.GetAt(i)).GetBuffer(0);
  6.    }
  7.    m_prbX = m_prbX->rbnext;
  8.    m_prbX->rbnext = NULL;
  9.    acutRelRb(newRB);
  10.    
  11.     m_XDataPending = true;
  12.     return Acad::eOk;
  13. }

我传递的密钥存储在CStringArray>>中。我转换为INT是否正确_ttoi(LPCTSTR(keys.GetAt(i))
传递值字符串对我来说似乎是一座太远的桥。>>CStringW(values.GetAt(i))。GetBuffer(0)
接下来我尝试设置扩展数据:
  1. Acad::ErrorStatus CadDrawing::setEntityXRecords()
  2.   {
  3.     Acad::ErrorStatus es = Acad::eOk;
  4.     if (m_XDataPending)   //is some Xdata set in m_prxB?
  5.     {
  6.       AcDbObject* pObj;
  7.       AcDbObjectId entID;  
  8.       ads_name ename;
  9.       acdbEntLast(ename);
  10.       acdbGetObjectId(entID, ename);
  11.       
  12.       if ((es = acdbOpenObject(pObj, entID, AcDb::kForWrite)) == Acad::eOk)  //open object for write succeeds
  13.       {
  14.          if ((es = pObj->setXData(m_prbX)) == Acad::eOk)   //..but set Xdata fails with error code 126
  15.         {
  16.            //success..
  17.          }
  18.          es = pObj->close();                             //close onbject
  19.        }
  20.    
  21.       acutRelRb(m_prbX);                                  //release the object's memory
  22.    
  23.        m_XDataPending = false;
  24.     }
  25.    
  26.     return es;
  27.   }

SetXData返回126(eRegappIdNotFound)
有人能解释一下吗
TIA,
Arno van Eeuwen

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

15

主题

109

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
169
发表于 2011-9-14 09:19:16 | 显示全部楼层
看起来不像您检查xdata应用程序名称是否已在应用程序字典中注册
请参见帮助文档中的“acdbRegApp()”。
回复

使用道具 举报

15

主题

190

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2011-9-14 09:47:30 | 显示全部楼层
这有效
  1. static bool GetEnt(AcDbObjectId &id, AcGePoint3d &pnt)
  2.     {
  3.         ads_name name = {0L, 0L};
  4.         bool flag = (acedEntSel(L"\nGet Entity",name,asDblArray(pnt)) == RTNORM);
  5.         id = (AcDbStub*)name[0];
  6.         return flag;
  7.     }
  8.     static void CStringArrayToResbulList(ResbufList &rList,
  9.                                          const INT_PTR count,
  10.                                          const CStringArray& keys,
  11.                                          const CStringArray& values)
  12.     {
  13.         if(count setXData(rList)));
  14.     }
  15. } ;

如果你想使用它
,你可以在这里得到 resbuflist 类
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-9-14 09:53:34 | 显示全部楼层

另请查看_tcsdup代码3]
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-9-14 10:56:49 | 显示全部楼层
当您调用acutRelRb(newRB)时,您正在释放指向我的m_prbX的内存。
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-9-15 09:27:30 | 显示全部楼层
感谢您的快速回复。
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++仍然不是我的一杯茶,特别是这种错误。
会让你随时了解情况。
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-9-15 09:47:17 | 显示全部楼层
您的项目中是否设置了_ DEBUG
我认为您无法做到这一点,因为BRX链接到MFC的发布版本。。。
回复

使用道具 举报

15

主题

109

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
169
发表于 2011-9-15 09:59:26 | 显示全部楼层
是的,
也许你可以定义自己的,即MY_DEBUG你的调试代码。
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-9-15 10:07:46 | 显示全部楼层
我的手提箱已经收拾好了等着。。。
回复

使用道具 举报

15

主题

190

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2011-9-15 10:46:01 | 显示全部楼层
我有机票,但我还没有预订房间,也许我应该留在最近的酒吧,
我带着空行李箱,这样我就可以带回巧克力
了。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-5-1 01:48 , Processed in 1.180834 second(s), 90 queries .

© 2020-2025 乐筑天下

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