#include "StdAfx.h" #include "SymbolStringList.h" #include "GlobalFunc.h" SymbolStringList::SymbolStringList(LPCTSTR pszTblName, LPCTSTR pszMask, bool bNameDict) : name(pszTblName) { TCString sFilter = pszMask ? pszMask : _T("*"); _tcsupr(sFilter); TCHAR szName[256]; memset(szName,0,sizeof(szName)); int nFlag = REWIND; if (!bNameDict) { while (1) { resbuf *rbBuf = ads_tblnext(pszTblName, nFlag); if (!rbBuf) { break; } resbuf* pNext = rbBuf; while(pNext != NULL) { if (pNext->restype == 2) { _tcscpy(szName,pNext->resval.rstring); _tcsupr(szName); if (ads_wcmatch(szName, sFilter) == RTNORM) { Append(tstrnew(szName)); break; } } pNext = pNext->rbnext; } ads_relrb(rbBuf); //GetData 方法在 CCurtainWallSet::OnInitDialog() 中使用时产生内存错误 //改为迭代resbuf 链表处理; //lfy 2010-4-2 /*TRBList rbTabs = rbBuf; if (rbTabs.GetData(2, name) == RTNORM) { _tcsupr(name); if (ads_wcmatch(name, sFilter) == RTNORM) { Append(tstrnew("0")); } }*/ nFlag = CONTINUE; } } else { AcDbDictionary* pNameDict = NULL; acdbOpenObject(pNameDict, acdbCurDwg()->namedObjectsDictionaryId(), AcDb::kForRead); if (pNameDict == NULL) { return; } AcDbObjectId idTable; pNameDict->getAt(pszTblName, idTable); pNameDict->close(); if (idTable.isNull() || !idTable.isValid()) { return; } ads_name eTblName; if (acdbGetAdsName(eTblName, idTable) != Acad::eOk) { return; } while (1) { resbuf *prbBuf = acdbDictNext(eTblName, nFlag); if (!prbBuf) { break; } resbuf* pNext = prbBuf; while(pNext != NULL) { if (pNext->restype == 2) { _tcscpy(szName,pNext->resval.rstring); _tcsupr(szName); if (ads_wcmatch(szName, sFilter) == RTNORM) { Append(tstrnew(szName)); break; } } pNext = pNext->rbnext; } ads_relrb(prbBuf); //GetData 方法在 CCurtainWallSet::OnInitDialog() 中使用时产生内存错误 //改为迭代resbuf 链表处理; //lfy 2010-4-2 /*TRBList rbTabs = prbBuf; if (rbTabs.GetData(2, name) == RTNORM) { _tcsupr(name); if (ads_wcmatch(name, sFilter) == RTNORM) { Append(tstrnew(name)); } }*/ nFlag = CONTINUE; } } } SymbolStringList::~SymbolStringList() { }