Crystal Reports Viewer в modaless диалоге - помогите!
От: vanes Россия  
Дата: 19.02.07 15:20
Оценка:
Очень прошу, помогите мне пожалуйста с моим вопросом:
Ситуация слежующая — есть диалог, на котором расположен ActiveX'овский контрол Crystal Reports Viewer.
Туда грузится отчет вот таким образом:

BOOL CMyRptDlg::OnInitDialog()
{
BOOL bRes = FALSE;


TRY
{

// CComPtr<ICRApplication> m_App;

HRESULT hRes;
if(FAILED(hRes = m_App.CreateInstance(_T("CrystalRuntime.Application.11"), NULL, CLSCTX_ALL)))
return hRes;

// CComPtr<IReport> m_MyReport;

CComVariant vtDummy;
vtDummy.vt = VT_EMPTY;
if(FAILED(hRes = m_App->OpenReport(bstrReport, vtDummy, &m_MyReport)))
return hRes;

if(m_ipReport == NULL)
return E_FAIL;

// m_crViewer — это Crystal Reports Viewer
m_crViewer.SetReportSource(m_ipReport); // exception
m_crViewer.ViewReport(); // exception

bRes = TRUE;
}
END_TRY;

return bRes & CDialog::OnInitDialog();
}

Беда здесь такая: пока диалог модальный — все нормально, но как только перестает им быть — отчет перестает грузиться и показывает messagebox с таким сообщением: "Logon failed."

На всякий случай — создание немодального диалога я делаю так:

m_pMyViewerDlg = new CMyRptDlg();
if (!m_pMyViewerDlg->Create(CMyRptDlg::IDD, AfxGetApp()->m_pMainWnd))
return E_FAIL;

if (!m_pMyViewerDlg->ShowWindow(SW_SHOWNORMAL))
return E_FAIL;

Кроме того — метод ShowWindow возвращает FALSE.

Заранее признателен.
Re: Crystal Reports Viewer в modaless диалоге - помогите!
От: Аноним  
Дата: 20.02.07 07:39
Оценка:
Здравствуйте, vanes, Вы писали:

V>Очень прошу, помогите мне пожалуйста с моим вопросом:

V>Ситуация слежующая — есть диалог, на котором расположен ActiveX'овский контрол Crystal Reports Viewer.
V>Туда грузится отчет вот таким образом:
....
Первое, что приходит в голову, при таких ошибках — использование локальных объектов.
В случае модального диалога все будет работать, т.к. объект еще будет жив (выполнение программы "останавливается" на DoModal()), а в случае немодального — объекта диалога уже не будет (ShowWindow()), т.к. программа продолжит свое выполнение и объект выйдет из зоны своей видимости...
Re[2]: Crystal Reports Viewer в modaless диалоге - помогите!
От: Аноним  
Дата: 20.02.07 07:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, vanes, Вы писали:


V>>Очень прошу, помогите мне пожалуйста с моим вопросом:

V>>Ситуация слежующая — есть диалог, на котором расположен ActiveX'овский контрол Crystal Reports Viewer.
V>>Туда грузится отчет вот таким образом:
А>....
А>Первое, что приходит в голову, при таких ошибках — использование локальных объектов.
А>В случае модального диалога все будет работать, т.к. объект еще будет жив (выполнение программы "останавливается" на DoModal()), а в случае немодального — объекта диалога уже не будет (ShowWindow()), т.к. программа продолжит свое выполнение и объект выйдет из зоны своей видимости...

Да, вот на этот случай я и сделал диалог переменной членом, и вообще на всякий случай создавал его в динамической памяти, а не в стеке.

Мне кажестся, что проблема здесь кроется в особом использовании ActiveX объектов в недиалоговом контейнере (ведь CrystalActiveXReportViewer, т.е. m_crViewer — это ActiveX контрол). Но точно причину еще пока не установил.

vanes.
Re[2]: Crystal Reports Viewer в modaless диалоге - помогите!
От: Аноним  
Дата: 20.02.07 08:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, vanes, Вы писали:


V>>Очень прошу, помогите мне пожалуйста с моим вопросом:

V>>Ситуация слежующая — есть диалог, на котором расположен ActiveX'овский контрол Crystal Reports Viewer.
V>>Туда грузится отчет вот таким образом:
А>....
А>Первое, что приходит в голову, при таких ошибках — использование локальных объектов.
А>В случае модального диалога все будет работать, т.к. объект еще будет жив (выполнение программы "останавливается" на DoModal()), а в случае немодального — объекта диалога уже не будет (ShowWindow()), т.к. программа продолжит свое выполнение и объект выйдет из зоны своей видимости...

И еще забыл сказать — m_crViewer.ViewReport() выбрасывает exception.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.