VC60中,程序出现"0x5f55a57b"指令引用的"0x00000000"内存。该内存不能为"read"希望大侠们帮我看下。
描述:
这是要在我的程序中插入一个OLE对象;
其中NHOLEObject为COleClientItem派生的类;
NHOLEGraphic为我画OLE对象的类;
设计这个程序时是考虑将OLE对象像画直线,文本,矩形等对象一样画出来;
NHOLEObject,和NHOLEGraphic这两个类互相关联了。
程序编译通过,但是运行的时候,只能到达“调试点1”,之后就出现断言错误,忽略的话,就出这个警告提示
"0x5f55a57b"指令引用的"0x00000000"内存。该内存不能为"read".
程序退出运行。
也就是可以出现对象选者对话框,但是点击确定后就出问题了。
另:在NHOLEObject和NHOLEGraphic中相互关联的类都初始化为了NULL;
NHOLEObject中有 NHOLEGraphic* m_pNHOLEGraphic;
NHOLEGraphic中有 NHOLEObject* m_pNHOLEObject;
希望各位大侠帮忙思考下是哪里出了问题。
代码如下:
void CCardTemplateView::OnNewOle()
{
COleInsertDialog dlg;
if (dlg.DoModal() != IDOK)
return;
BeginWaitCursor();
CRect m_rect;
m_rect.SetRect(10,10,210,210);
// First create the C++ object
NHOLEGraphic* pOLEGraphic= new NHOLEGraphic(m_rect);
ASSERT_VALID(pOLEGraphic);
NHOLEObject* pOLEObject = new NHOLEObject(GetDocument(), pOLEGraphic);
ASSERT_VALID(pOLEObject);
pOLEGraphic->m_pNHOLEObject = pOLEObject;
AfxMessageBox("1");//调试点1
// Now create the OLE object/item
TRY
{
if (!dlg.CreateItem(pOLEGraphic->m_pNHOLEObject))
AfxThrowMemoryException();
AfxMessageBox("2");//调试点2
// add the object to the document
if(m_pCard)
{
if(m_pCard->m_pCurPage)
{
m_pCard->m_pCurPage->AddGraphic(pOLEGraphic);
CRect rect;
GetClientRect(rect);
InvalidateRect(rect);
}
}
AfxMessageBox("3");//调试点3
// try to get initial presentation data
pOLEObject->UpdateLink();
//pOLEObject->UpdateExtent();
// if insert new object -- initially show the object
if (dlg.GetSelectionType() == COleInsertDialog::createNewItem)
pOLEObject->DoVerb(OLEIVERB_SHOW, this);
}
CATCH_ALL(e)
{
// clean up item
pOLEObject->Delete();
pOLEGraphic->m_pNHOLEObject = NULL;
if(m_pCard)
{
if(m_pCard->m_pCurPage)
{
m_pCard->m_pCurPage->DeleteGraphic(pOLEGraphic);
CRect rect;
GetClientRect(rect);
InvalidateRect(rect);
}
}
AfxMessageBox("系统没有这样子的一个OLE对象,失败");
}
END_CATCH_ALL
EndWaitCursor();
}