Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Падает на TPrinter.BeginDoc   Найти похожие ветки 

 
@!!ex ©   (2010-03-04 14:08) [0]

Есть 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();

В чем может быть проблема?


 
Sapersky   (2010-03-04 14:41) [1]

В модуле 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;


 
@!!ex ©   (2010-03-04 15:08) [2]

Точно! То что нужно! Все заработало. Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.117 c
2-1273577748
Shyrick
2010-05-11 15:35
2010.08.27
MainMenu &amp; WinAPI


2-1272622374
slay64
2010-04-30 14:12
2010.08.27
Хранимая процедура


15-1269450731
GDI+
2010-03-24 20:12
2010.08.27
Формула рассчета расстояния между двумя точками на сфероиде


2-1273386583
Waleeera
2010-05-09 10:29
2010.08.27
Delphi


15-1273782594
Юрий
2010-05-14 00:29
2010.08.27
С днем рождения ! 14 мая 2010 пятница