1

我是这个论坛和 MFC 的新手……调试断言失败

在使用 ActiveX 控件时。请指导我这个..我的代码看起来

像这样:

//CMyProjectDlg.h
class CMyProjectDlg: public CDialog
{
public:
CMyProject(CWnd* pParent = NULL);
enum { IDD = IDD_CMYPROJECT_DIALOG };
CMiDocView  m_MIDOCtrl;
//Here CMiDocView is the class defined in other header file

protected:
BOOL  bReadOCRByMODIAXCtrl(CString csFilePath,  CString &csText);

};

//CMyProjectDlg.cpp
BOOL CMyProjectDlg::bReadOCRByMODIAXCtrl(CString csFilePath, CString &csText)
{
BOOL bRet  = TRUE;
HRESULT hr = 0;
csText.Empty();


IUnknown   *pVal    = NULL;
IDocument  *IDobj   = NULL;
ILayout    *ILayout = NULL;
IImages    *IImages = NULL;
IImage     *IImage  = NULL;
IWords     *IWords  = NULL;
IWord      *IWord   = NULL;

try{
pVal = (IUnknown *) m_MIDOCtrl.GetDocument();

//After Executing this statement, I used to Debug Assertion failed...

if ( pVal != NULL )
{
hr = pVal->QueryInterface(IID_IDocument,(void**) &IDobj);
if ( SUCCEEDED(hr) )
{
hr = IDobj->OCR(miLANG_SYSDEFAULT,1,1);
if ( SUCCEEDED(hr) )
{
IDobj->get_Images(&IImages);
long iImageCount=0;
IImages->get_Count(&iImageCount);
for ( int img =0; img<iImageCount;img++)
{
IImages->get_Item(img,(IDispatch**)&IImage);
 IImage->get_Layout(&ILayout);
long numWord=0;
ILayout->get_NumWords(&numWord);
ILayout->get_Words(&IWords);
IWords->get_Count(&numWord);

for ( long i=0; i<numWord;i++)
 {
IWords->get_Item(i,(IDispatch**)&IWord);
CString csTemp;
BSTR result;
IWord->get_Text(&result);
char buf[256];
sprintf(buf,"%S",result);
csTemp.Format("%s",buf);
csText += csTemp;
csText +=" ";

//Release all objects
IWord->Release();
IWords->Release();
ILayout->Release();
IImage->Release();
}
IImages->Release();
} else {
bRet = FALSE;
}
} else {
bRet = FALSE;
}
IDobj->Close(0);
 IDobj->Release();
pVal->Release();
} else {
bRet = FALSE;
}
pVal    = NULL;
IDobj   = NULL;
ILayout = NULL;
IImages = NULL;
IImage  = NULL;
IWords  = NULL;
IWord   = NULL;
}
catch(...)
{
}

 return bRet;
}

 void CMyProjectDlg::OnBnClickedOCR()
 {
  //Dynamic object creation:
 CMyProjectDlg *ob = new CMyProjectDlg;

 ((CMiDocView *)GetDlgItem(IDC_MIDOCVIEW1))->SetFileName("E:\\aaa.tiff");

 //IDC_MIDOCVIEW is the ID for the ActiveX control..

 ((CMiDocView *) GetDlgItem( IDC_MIDOCVIEW1 ))->SetFitMode(1);

 CString cs;
 ob->bReadOCRByMODIAXCtrl("E:\\aaa.tiff",cs);

 //Release the memory:
 delete ob;

 }

点击OCR按钮后,我用Debug assertion failed就行了: pVal = (IUnknown *) m_MIDOCtrl.GetDocument(); 当我按下重试时,控件转到 winocc.cpp 中的 ASSERT(m_pCtrlsite != NULL),而调试时我知道 {CMIDOCView hWnd = 0x0000000}。

请任何人都可以建议我在这里做错了什么?

谢谢你们..

4

0 回答 0