调用NormalCellHeaderHandler::CreateGroupCellElement(eeh, agenda, L“”)接口时Microstation崩溃了,报了如图所示错误:请问怎么
捕获这里的异常?
我尝试用
try{} catch(Exception e)
可是还是没能捕获到这里的异常,还是会崩溃。
MDL开发用try...catch...这一套不管用的。请提供您的完整代码,包括您的eeh和agenda都是如何声明和获取的。最后一个参数默认为NULL,可以不给试一下。
完整代码如下:
bool ElementInfAchieve::createElms(ElmGraphic* pgra, ModelElementID& elid){ if (pgra->ptrgeos.size() == 0) return false; DgnModelP pModel = ACTIVEMODEL->GetDgnModelP(); CDgnModelMethod::getModel(elid.modid); EditElementHandle eeh; ElementRefP oldref = nullptr; if(BaseDraw::getElmFromModElmId(eeh, elid)) oldref = eeh.GetElementRef(); ElementPropertiesSetterPtr psetter = nullptr;
bool rs = false; if (pgra->ptrgeos.size() ==1) { if (pgra->eppys.size() >0) psetter = convertSetter(&pgra->eppys[0]); if (createElm(pgra->ptrgeos[0], psetter, eeh, pModel)) { rs = true; } } else { ElementAgenda agenda; for (int i = 0; i < pgra->ptrgeos.size(); i++) { if (pgra->eppys.size() >i) psetter = convertSetter(&pgra->eppys[i]); EditElementHandle eehi; if (createElm(pgra->ptrgeos[i], psetter, eehi, pModel)) { agenda.Insert(eehi); } } if (agenda.size() > 0) { try { if (BentleyStatus::SUCCESS == NormalCellHeaderHandler::CreateGroupCellElement(eeh, agenda, L"")) { rs = true; } } catch (exception e) { } } } if (rs) { if (pgra->links != nullptr) { DependencyLinkage depLinkage = BaseDraw::getLinkFromXat(*pgra->links.get()); DependencyManagerLinkage::AppendLinkage(eeh, depLinkage, 0); } if (oldref != nullptr) return SUCCESS == eeh.ReplaceInModel(oldref); else { if (SUCCESS == eeh.AddToModel()) { elid = BaseDraw::getModElmId(eeh); } } } return rs;}
您的代码写得有些复杂。我写了如下测试代码专门测试该函数,是能正确工作的。打开任意一个dgn文件,用选择集工具选中几个元素,然后执行如下代码就能将这几个元素添加到一个组中。请您对照该测试代码找出您代码中的问题。另外提醒一下,我们论坛有专门插入代码的工具,请阅读置顶的【发帖指南】学习如何使用。谢谢!
void CreateGroupCellElementTest() { if (!SelectionSetManager::GetManager().IsActive()) { mdlDialog_dmsgsPrint(L"No selection set found"); return; } ElementAgenda agenda; SelectionSetManager::GetManager().BuildAgenda(agenda); EditElementHandle eeh; if (SUCCESS == NormalCellHeaderHandler::CreateGroupCellElement(eeh, agenda)) { eeh.AddToModel(); mdlDialog_dmsgsPrint(L"CreateGroupCellElement is successful"); } else mdlDialog_dmsgsPrint(L"CreateGroupCellElement failed"); }