-1

通过使用 getAt() 方法,我得到了这样一个奇怪的违规错误。 在此处输入图像描述 我按以下顺序使用该方法:

    OdDbBlockTablePtr       w_kOdBlockTablePtr ;
    bool  lbCreateDefaults = false;
    OdDb::MeasurementValue  lkMeasurement = OdDb::kEnglish;
    OdDbDatabasePtr pDb;
    // Datenbank initialisieren
    pDb = g_ExSystemServices.createDatabase(lbCreateDefaults, 
    lkMeasurement);

    // TABLE - Hold Ptr
    
    w_kOdBlockTablePtr = pDb->getBlockTableId().openObject(OdDb::kForWrite);
const wchar_t AcadBlockModelSpace[] = L "*MODEL_SPACE";

wstring lsModelSpace(AcadBlockModelSpace);
w_kOdModelSpaceBlockRecPtr = GetTableRecordIdFromName(lsModelSpace, (OdDbSymbolTablePtr&)w_kOdBlockTablePtr).safeOpenObject(OdDb::kForWrite);


OdDbObjectId K_TeighaClass::GetTableRecordIdFromName(wstring& psName, OdDbSymbolTablePtr& pkTablePtr)
{
    OdDbObjectId lkId;
    try {
        OdString lsOdName = psName.c_str();
        lkId = pkTablePtr->getAt(lsOdName);
    }

    catch (OdError& err)
    {

        DoOdError(err, NULL, NULL);
    }

    return lkId;
}

如果有人可以帮助我,我将不胜感激。提前致谢

4

1 回答 1

0

这一点也不奇怪。如果您将鼠标悬停在 上pkTablePtr,您几乎肯定会发现它是nullptr(或者调试器可能会将其报告为0)。

您的问题中没有足够的信息来说明为什么会这样,但是由于您已经在调试器下运行,您可以遍历您的代码并找出答案。

try...catch顺便说一句,不会遇到这样的硬错误。为此,您需要__try... __except(仅在 Windows 上受支持)。

于 2022-02-28T08:51:03.363 回答