Во-первых, позвольте мне предисловие, что я не программист на C / C ++, поэтому я не могу протестировать код - мое взаимодействие с SDK было с интерфейсом VB и .Net на протяжении многих лет.
Я нашел следующий код из библиотеки BO :
// A dummy variant
VariantInit (&dummy);
dummy.vt = VT_EMPTY;
HRESULT hr = S_OK;
// Specify the path to the report you want to print
_bstr_t ReportPath("c:\\Program Files\\Business Objects\\Crystal Reports 11.5\\Samples\\En\\Reports\\General Business\\Inventory.rpt");
_variant_t vtEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR);
// Instantiate the IApplication object
m_Application.CreateInstance("CrystalRuntime.Application.115");
//Open the Report using the OpenReport method
m_Report = m_Application->OpenReport(ReportPath, dummy)
//Print the Report to printer
m_Report->PrintOut(dummy, dummy, dummy, dummy);
Это работает? Он должен распечатать отчет с настройками принтера «по умолчанию» и без запроса.
Вы писали:
Однако, в конце всего этого,
Crystal Reports по-прежнему показывает свои собственные
диалог выбора принтера - но только
для некоторых отчетов, кажется.
Вообще говоря, я обнаружил, что Crystal склонен игнорировать команды для подавления диалогов, если считает, что чего-то не хватает. Я обнаружил, что это правда в диалоге параметров. Возможно, это относится и к этой ситуации. Я хотел бы спросить, что отличается от отчетов, которые вызывают создание диалога. Существует опция «нет принтера», которую можно установить. Возможно, это общая тема.
Есть ли у вас доступ к VB6 IDE? Если вы пишете эквивалентные команды с использованием интерфейса VB6, возникает ли запрос?
Вы также можете исследовать использование CRPE32.dll вместо элемента управления конструктора отчетов. Честно говоря, я не знаю, является ли RDC оболочкой из библиотеки CRPE DLL или это совершенно отдельная база кода.