Использование Dll для вывода отчета в приложении

zilogzilog Масква
отредактировано August 2008 Раздел: FastReport 4.0
Здравствуйте, пытаюсь передать из dll скрипт *.fr3(находится в ресурсах) через TStringStream. Функция в dll выглядит так
procedure GetRep(var ss:TStringStream);safecall;
var
  sr: TResourceStream;
begin
    sr:=TResourceStream.Create(HInstance,'WAITCOMPL', RT_RCDATA);
  try
    sr.Position:=0;
    ss.CopyFrom(sr,0);
  finally
    sr.Free;
  end;
end;
Потом в главной форме скармливаю поток через метод frxReport1.LoadFromStream
procedure TForm1.N2Click(Sender: TObject);
var
  ss: TStringStream;
begin
  ss:=TStringStream.Create('');
  GetRep(ss);
  ShowMessage(ss.DataString);
  frxReport1.LoadFromStream(ss);
  frxReport1.ShowReport();
end;
.
На выходе ошибка, в
raise TfrxInvalidXMLException.Create('Invalid file format');
Может проблема с unicode?

Комментарии

  • zilogzilog Масква
    отредактировано 23:14
    Однако, когда изменяю код таким образом, что у меня XML передается через PChar и принимается через PChar, а потом создается TStringStream со строкой StrPas(PChar), все работает нормально.
    procedure GetRep(fl:integer;var ss:PChar);safecall;
    var
      sr: TResourceStream;
      st: TStringStream;
    begin
      sr:=TResourceStream.Create(HInstance,TTN_Stat[fl], RT_RCDATA);
      st:=TStringStream.Create('');
      try
        sr.Position:=0;
        st.CopyFrom(sr,0);
        ss:=PChar(st.DataString);
      finally
        sr.Free;
        st.Free;
      end;
    end;
    
    procedure TForm1.N2Click(Sender: TObject);
    var
      ss: PChar;
      st: TStringStream;
    begin
      GetRep(TComponent(Sender).tag,ss);
      st:=TStringStream.Create(StrPas(ss));
      frxReport1.LoadFromStream(st);
      frxReport1.ShowReport;
    end;
    
  • отредактировано 23:14
    написал:
    Однако, когда изменяю код таким образом, что у меня XML передается через PChar и принимается через PChar, а потом создается TStringStream со строкой StrPas(PChar), все работает нормально.
    C dll так и надо работать. Либо подключать модуль ShareMem.
    (об этом написаннов коментариях исходного файла dll-ки)
  • zilogzilog Масква
    отредактировано 23:14
    написал: »
    C dll так и надо работать. Либо подключать модуль ShareMem.
    (об этом написаннов коментариях исходного файла dll-ки)
    Спасибо за ответ. А можно код показать, у меня та же самая ошибка при подключенном ShareMem.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.