C++, COM, Crysta Report - помогите
От: alexandr_msk  
Дата: 03.10.06 14:00
Оценка:
Народ, подскажите, пожалуйста.
Работаю с Crystal Reports на Visual C++ через COM интерфейс. Открываю отчет, а затем пытаюсь его экспортировать в файл Word. Вот код:
    IApplicationPtr app;
    IReportPtr report;
    IExportOptionsPtr export_opt;

    HRESULT hr;
    try
    {
        hr = app.CreateInstance( TEXT("CrystalRuntime.Application"), NULL, CLSCTX_INPROC_SERVER );

        // открываем отчёт

        report = app->OpenReport(_bstr_t(_T("c:\\1\\crKDOK_ZP01.rpt")));
        if (report == 0)
            printf("отчет не открыт");

        export_opt = report->ExportOptions;
        _bstr_t appfile(report->ApplicationName);
        _tprintf(TEXT("%s \n"), (LPCTSTR)appfile);

        export_opt->DestinationType = crEDTDiskFile;
        export_opt->DiskFileName = _bstr_t("crExportFileName.doc");
        export_opt->FormatType = crEFTWordForWindows;

        report->Export(FALSE);       
    }
    catch ( _com_error e )
    {
        _bstr_t bstrSource(e.Source());
        _bstr_t bstrDescription(e.Description());
        printf("Error ");
        printf(" Code = %08lx ", e.Error());
        char bufdos[5000];
        ZeroMemory(bufdos, 5000);
        CharToOem(e.ErrorMessage(), bufdos);
        printf(" Code meaning = %s ", bufdos);
        printf(" Source = %s ", (LPCSTR) bstrSource);
        ZeroMemory(bufdos, 5000);
        CharToOem(e.Description(), bufdos);
        printf(" Description = %s ", bufdos);
    }


Но на функции Export() он зараза, пишет ошибку 80020005: Несовпадение типов.
Что я не так делаю? Подскажите, пожалуйста

03.10.06 20:28: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Добавлено форматирование — Кодт
Re: C++, COM, Crysta Report - помогите
От: George Seryakov Россия  
Дата: 03.10.06 20:50
Оценка:
Здравствуйте, alexandr_msk, Вы писали:

_> report->Export(FALSE);


_>Но на функции Export() он зараза, пишет ошибку 80020005: Несовпадение типов.

_>Что я не так делаю? Подскажите, пожалуйста

Не знаю точно, чтобы наверняка, нужно смотреть объявление интерфейса. Но одно знаю точно — сишные true/false — это не совсем то же, что VARIANT_TRUE/VARIANT_FALSE. Это может сыграть, если Export() вызывается через диспатчный интерфейс, но чего люди не напишут...
GS
Re[2]: C++, COM, Crysta Report - помогите
От: alexandr_msk  
Дата: 04.10.06 06:46
Оценка:
Здравствуйте, George Seryakov, Вы писали:

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


_>> report->Export(FALSE);


_>>Но на функции Export() он зараза, пишет ошибку 80020005: Несовпадение типов.

_>>Что я не так делаю? Подскажите, пожалуйста

GS>Не знаю точно, чтобы наверняка, нужно смотреть объявление интерфейса. Но одно знаю точно — сишные true/false — это не совсем то же, что VARIANT_TRUE/VARIANT_FALSE. Это может сыграть, если Export() вызывается через диспатчный интерфейс, но чего люди не напишут...



Спасибо большое, показали мне направление, а то уж я отчаялся
Действительно, надо экспортировать так:

_variant_t prUser((bool)FALSE);
report->Export(prUser);

и все работает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.