如何使用方法解决违规错误
how to solve a violation Error using a method
我在使用 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;
}
如果有人能帮助我,我将不胜感激。
提前致谢
一点也不奇怪。如果将鼠标悬停在 pkTablePtr
上,您几乎肯定会发现它是 nullptr
(或者调试器可能将其报告为 0
)。
你的问题中没有足够的信息来说明为什么会这样,但由于你已经 运行 在调试器下,你可以浏览你的代码并找出答案。
顺便说一句,try
... catch
不会捕获这样的硬错误。为此,您需要 __try
... __except
(仅 Windows 支持)。
我在使用 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;
}
如果有人能帮助我,我将不胜感激。 提前致谢
一点也不奇怪。如果将鼠标悬停在 pkTablePtr
上,您几乎肯定会发现它是 nullptr
(或者调试器可能将其报告为 0
)。
你的问题中没有足够的信息来说明为什么会这样,但由于你已经 运行 在调试器下,你可以浏览你的代码并找出答案。
顺便说一句,try
... catch
不会捕获这样的硬错误。为此,您需要 __try
... __except
(仅 Windows 支持)。