![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Падает на TPrinter.BeginDoc
@!!ex © (2010-03-04 14:08:00)Есть dll, в ней экспортится функция
Procedure Print(); stdcall;
begin
MyPrinter := TPrinter.Create();
OffsetY := Round(MyPrinter.PageHeight * 0.05);
CenterX := MyPrinter.PageWidth div 2;
OffsetX1 := Round(MyPrinter.PageWidth * 0.1);
OffsetX2 := Round(MyPrinter.PageWidth * 0.35);
OffsetX3 := Round(MyPrinter.PageWidth * 0.4);
MyPrinter.Canvas.Font.Height := 24;
MyPrinter.Canvas.Font.Name := 'Times New Roman';
MyPrinter.BeginDoc();
...
end;
В тестовом примере с приложением на Delphi - все норм отрабатывает.
При вызове из С++ теста или из другой dll - валится с AV на BeginDoc();
В чем может быть проблема?
@!!ex (2010-03-04 15:08:00) [1]Точно! То что нужно! Все заработало. Спасибо.
Sapersky (2010-03-04 14:41:00) [2]В модуле Printers принято использовать объект-синглтон (или как он правильно называется), возвращаемый функцией Printer, а не создавать свой объект.
Иначе получаем:
procedure TPrinter.BeginDoc;
begin
<...>
SetAbortProc(DC, AbortProc);
<...>
end;
function AbortProc(Prn: HDC; Error: Integer): Bool; stdcall;
begin
Application.ProcessMessages;
Result := not FPrinter.Aborted; // FPrinter не создан, AV
end;