После добавления PEParameterFieldInfo получаю ошибку.
От: EvgeniyIshchenko  
Дата: 18.11.05 07:58
Оценка:
Отчет Crystal Reports.
Отчет экспортируется с помощью API функций:
void __fastcall TMainForm::BitBtn1Click(TObject *Sender)

{

  //Path to report
  String path = "c:\\rep_test1.rpt";
  //Job for print
  short Job = PEOpenPrintJob(path.c_str());
  if (!Job)
    {
    ShowMessage("не найден "+path+", "+Job);
    return;
    }
 
   
// Начало присвоение переменным отчета значений
// Если кусок присвоения выкинуть, все работает. Где в нем ошибка
    PEParameterFieldInfo ParameterFieldInfo;
    ParameterFieldInfo.StructSize = PE_SIZEOF_PARAMETER_FIELD_INFO;

    short nparams = PEGetNParameterFields(Job);
    for(short i=0; i<nparams; i++)
      {
      if (!PEGetNthParameterField (Job, i, &ParameterFieldInfo))
        {
        MainForm->ShowError(Job);
        break;
        }

      if (strcmp(ParameterFieldInfo.Name,"@Test1") == 0)
        {
        ParameterFieldInfo.CurrentValueSet = 1;
        double tdoc_id = 100;
        memcpy(ParameterFieldInfo.CurrentValue, &tdoc_id, sizeof(tdoc_id));        
        if (!PESetNthParameterField(Job, i, &ParameterFieldInfo))
          MainForm->ShowError(Job);
        }
      }

//Конец присвоения переменным отчета значений
      
  //Variables for Export to RTF
  UXDDiskOptions DiskOptions;
  UXFERTFFormatOptions SeparationOptions;
  PEExportOptions ExportOptions;

  //Structure for info output file
  DiskOptions.structSize = UXDDiskOptionsSize;
  DiskOptions.fileName = "c:\\samplefile.rtf";

  ExportOptions.StructSize = PE_SIZEOF_EXPORT_OPTIONS;
  lstrcpy(ExportOptions.formatDLLName, "CRXF_RTF.DLL");
  ExportOptions.formatType = UXFRichTextFormatType;
  ExportOptions.formatOptions = &SeparationOptions;
  strcpy(ExportOptions.destinationDLLName, "U2DDISK.DLL");
  ExportOptions.destinationType = UXDDiskType;
  ExportOptions.destinationOptions = &DiskOptions;
  //For export
  PEExportTo(Job, &ExportOptions);

  //Start Export to file
  if (!PEStartPrintJob(Job, true))
     ShowError(Job);  // ошибка появляется в этом месте, текст ошибки
                     //  3-4 нечитаемых символа 
  //Close Job
  PEClosePrintJob(Job);
}


Если блок присвоения переменным отчета значений убрать, то все работает.

PS Те же симптомы возникают даже если нет блока присвоения переменным отчета значений,
но при этом сама функция вызывается из другой функции. Например:
void __fastcall TMainForm::BitBtn2Click(TObject *Sender)
{
  MainForm->BitBtn1Click(MainForm);
}



19.11.05 07:25: Перенесено модератором из 'C/C++' — Павел Кузнецов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.