Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'. / 16 сообщений из 16, страница 1 из 1
21.09.2019, 17:15
    #39865057
Женя32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
Здравствуйте!
Подскажите пожалуйста, из-за чего может быть такая ошибка?:
Access violation at address 77304CB3 in module 'ntdll.dll'. Read of address 0204F7C8
...
Рейтинг: 0 / 0
21.09.2019, 17:53
    #39865061
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
Женя32Здравствуйте!
Подскажите пожалуйста, из-за чего может быть такая ошибка?:
Access violation at address 77304CB3 in module 'ntdll.dll'. Read of address 0204F7C8 Чаще всего это происходит, когда в функции этой all передают кривые параметры.
Еще могут быть и глюки винды, конечно, но это в 100000000 раз реже.
...
Рейтинг: 0 / 0
21.09.2019, 19:36
    #39865084
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
Женя32Здравствуйте!
Подскажите пожалуйста, из-за чего может быть такая ошибка?:
Access violation at address 77304CB3 in module 'ntdll.dll'. Read of address 0204F7C8
Гадаю по адресам :) Давай код.
...
Рейтинг: 0 / 0
21.09.2019, 21:36
    #39865100
Женя32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
ziv-2014Гадаю по адресам :) Давай код.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
   private
    { Private declarations }
     vbmapFs, sbmapFs, vbmapRs, sbmapRs: TBitmap;
     procedure LoadImage(FileName1, FileName2: string);
     procedure DrawImage;
     procedure TextOutOnForm(Canvas: TCanvas; X1, X2, Y, N: integer; Text: string);
     procedure BuildImage;
  public
   { Public declarations }

  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}



{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  // vbmapFs хранит готовое изображение для отображения 1
  vbmapFs := TBitmap.Create;
  vbmapFs.Width  := 1;
  vbmapFs.Height := 1;
  vbmapFs.PixelFormat := pf24bit;

  // sbmapFs хранит исходное изображение бланка  1
  sbmapFs := TBitmap.Create;
  sbmapFs.Width  := 1;
  sbmapFs.Height := 1;
  sbmapFs.PixelFormat := pf24bit;

    // vbmapRs хранит готовое изображение для отображения 2
  vbmapRs := TBitmap.Create;
  vbmapRs.Width  := 1;
  vbmapRs.Height := 1;
  vbmapRs.PixelFormat := pf24bit;

  // sbmapRs хранит исходное изображение бланка 2
  sbmapRs := TBitmap.Create;
  sbmapRs.Width  := 1;
  sbmapRs.Height := 1;
  sbmapRs.PixelFormat := pf24bit;

  LoadImage('Original1.bmp','Original2.bmp');
  BuildImage; // Построение изображения
  DrawImage; // Обновление картинки на экране
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  vbmapFs.Destroy;
  sbmapFs.Destroy;
  vbmapRs.Destroy;
  sbmapRs.Destroy;
end;

procedure TForm1.TextOutOnForm(Canvas: TCanvas; X1, X2, Y, N: integer;
  Text: string);
var
  i: integer;
  k: double;
begin
  
  Canvas.MoveTo(X1, Y - 10);
  Canvas.LineTo(X1, Y     );
  Canvas.MoveTo(X2, Y - 10); 
  Canvas.LineTo(X2, Y     );

  if N > 1 then k := (X2 - X1) / (N - 1) // Шаг символов
           else k := 1;
  if Length(Text) > N then
    SetLength(Text, N);

  for i := 0 to Length(Text) - 1 do
    Canvas.TextOut(X1 + Round(K*i - Canvas.TextWidth(Text[i+1])/2), Y, Text[i+1]);
end;

procedure TForm1.BuildImage;
begin
 // Очистка фона 1/
  vbmapFs.Width  := sbmapFs.Width ;
  vbmapFs.Height := sbmapFs.Height;
  vbmapFs.PixelFormat := pf24bit;
  vbmapFs.Canvas.Draw(0, 0, sbmapFs);

 // Очистка фона 2/
  vbmapRs.Width  := sbmapRs.Width ;
  vbmapRs.Height := sbmapRs.Height;
  vbmapRs.PixelFormat := pf24bit;
  vbmapRs.Canvas.Draw(0, 0, sbmapRs);

  // Параметры шрифта
  vbmapFs.Canvas.Font.Name := 'Arial';
  vbmapFs.Canvas.Font.Size := 16;

  // Вывод текста
  TextOutOnForm(vbmapFs.Canvas, 203, 1382, 337, 35, SuName.Text);

end;

procedure TForm1.DrawImage;
var
  nw, nh: integer;
begin
  nw := vbmapFs.Width  - 4;
  nh := vbmapFs.Height - 4;
  if cbZoom.ItemIndex = 0 then begin
    // Уместить в окне
    nh := ScrollBox1.Height - 4;
    nw := Round(ScrollBox1.Height*vbmapFs.Width /vbmapFs.Height) - 4;
    if nw > ScrollBox1.Width  then begin
      nw := ScrollBox1.Width  - 4;
      nh := Round(ScrollBox1.Width *vbmapFs.Height/vbmapFs.Width ) - 4;
    end;
  end;
  if cbZoom.ItemIndex = 2 then begin
    // Масштаб 50%
    nw := (vbmapFs.Width  - 4) div 2;
    nh := (vbmapFs.Height - 4) div 2;
  end;

  with PaintBox1 do begin
    Width  := nw;
    Height := nh;
    Canvas.Lock;
    // Задать режим масштабирования со сглаживанием
    SetStretchBltMode(Canvas.Handle, HALFTONE);
    // Скопировать картинку с масштабированием
    StretchBlt(Canvas.Handle, 0, 0, Width , Height, vbmapFs.Canvas.Handle,
               0, 0, vbmapFs.Width , vbmapFs.Height, SRCCOPY);
    Canvas.Unlock;
  end;
end;

procedure TForm1.LoadImage(FileName1, FileName2: string);
var
  pic1, pic2: TPicture;
begin
  if not FileExists(FileName1) then  MessageDlg('Файл '+FileName1+' не найден', mtWarning,[mbOk], 0)
  else if not FileExists(FileName1) then  MessageDlg('Файл '+FileName2+' не найден', mtWarning,[mbOk], 0)
  else
    begin
       pic1 := TPicture.Create;
       pic1.LoadFromFile(FileName1);
       sbmapFs.Width  := pic1.Graphic.Width ;
       sbmapFs.Height := pic1.Graphic.Height;
       sbmapFs.PixelFormat := pf24bit;
       sbmapFs.Canvas.Draw(0, 0, pic1.Graphic);
       pic1.Destroy;

       pic2 := TPicture.Create;
       pic2.LoadFromFile(FileName2);
       sbmapRs.Width  := pic2.Graphic.Width ;
       sbmapRs.Height := pic2.Graphic.Height;
       sbmapRs.PixelFormat := pf24bit;
       sbmapRs.Canvas.Draw(0, 0, pic2.Graphic);
       pic2.Destroy;
    end;
end;

procedure TForm1.SuNameChange(Sender: TObject);
begin
  BuildImage; // Построение изображения
  DrawImage; // Обновление картинки на экране
end;

procedure TForm1.PageControl1Change(Sender: TObject);
begin
  BuildImage; // Построение изображения
  DrawImage; // Обновление картинки на экране
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  BuildImage; // Построение изображения
  DrawImage; // Обновление картинки на экране
end;

procedure TForm1.PaintBox2Paint(Sender: TObject);
begin
  BuildImage; // Построение изображения
  DrawImage; // Обновление картинки на экране
end;

procedure TForm1.ScrollBox1Resize(Sender: TObject);
begin
  BuildImage; // Построение изображения
end;

procedure TForm1.cbZoomChange(Sender: TObject);
begin
  BuildImage; // Построение изображения
  DrawImage; // Обновление картинки на экране
end;
end.
...
Рейтинг: 0 / 0
21.09.2019, 23:41
    #39865128
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
Женя32,

Пока непонятно. Надо в отладчике смотреть, на какой строке падает.
...
Рейтинг: 0 / 0
22.09.2019, 00:41
    #39865135
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
Женя32
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  with PaintBox1 do begin
    Width  := nw;
    Height := nh;
    Canvas.Lock;
    // Задать режим масштабирования со сглаживанием
    SetStretchBltMode(Canvas.Handle, HALFTONE);
    // Скопировать картинку с масштабированием
    StretchBlt(Canvas.Handle, 0, 0, Width , Height, vbmapFs.Canvas.Handle,
               0, 0, vbmapFs.Width , vbmapFs.Height, SRCCOPY);
    Canvas.Unlock;
  end;


Всё рисование на PaintBox'е должно производиться в его методе OnPaint, не?..
...
Рейтинг: 0 / 0
22.09.2019, 12:26
    #39865191
Женя32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
YuRockЖеня32,

Пока непонятно. Надо в отладчике смотреть, на какой строке падает.
В общем я нашел код, из-за которого возникает ошибка... Но, почему это происходит, я не понял...
И так, когда кода удалишь код, в котором используются вот эти переменные: vbmapRs, sbmapRs: TBitmap; , ошибка пропадает.
Почему так?
...
Рейтинг: 0 / 0
22.09.2019, 12:30
    #39865192
Женя32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
alekcvpВсё рисование на PaintBox'е должно производиться в его методе OnPaint, не?..
Да, как-то бес разнице, лишь бы рисовалось.......
...
Рейтинг: 0 / 0
22.09.2019, 12:57
    #39865194
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
Женя32YuRockЖеня32,

Пока непонятно. Надо в отладчике смотреть, на какой строке падает.
В общем я нашел код, из-за которого возникает ошибка... Но, почему это происходит, я не понял...
И так, когда кода удалишь код, в котором используются вот эти переменные: vbmapRs, sbmapRs: TBitmap; , ошибка пропадает.
Почему так?Слишком радикально.
Надо найти строку с вызовом функции, на которой падает.
И посмотреть на параметры, передающиеся в нее.
...
Рейтинг: 0 / 0
22.09.2019, 12:58
    #39865195
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
А для этого достаточно посмотреть на Call Stack в момент падения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.09.2019, 11:59
    #39866779
Женя32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
YuRockСлишком радикально.
Надо найти строку с вызовом функции, на которой падает.
И посмотреть на параметры, передающиеся в нее.
Ошибка возникает при загрузки файла, вот на этой строке:
Код: pascal
1.
 pic1.LoadFromFile(FileName1);


В процедуре:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TForm1.LoadImage(FileName1, FileName2: string);
var
  pic1, pic2: TPicture;
begin
       pic1 := TPicture.Create;
       ShowMessage(FileName1);
       pic1.LoadFromFile(FileName1);
       sbmapFs.Width  := pic1.Graphic.Width ;
       sbmapFs.Height := pic1.Graphic.Height;
       sbmapFs.PixelFormat := pf24bit;
       sbmapFs.Canvas.Draw(0, 0, pic1.Graphic);
       pic1.Destroy;
...
end;


YouTube Video
...
Рейтинг: 0 / 0
25.09.2019, 12:18
    #39866795
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
Женя32Ошибка возникает при загрузки файла, вот на этой строке:
Код: pascal
1.
 pic1.LoadFromFile(FileName1);

Ну вот, ты приближаешься к результату.
Теперь поставь там брэйкпоинт, добавь в пути проекта пути исходников VCL/RTL, нажми билд олл и продолжай дебажить (внутрь), пока не найдешь причину. Если есть желание.

П.С. Не надо так писать никогда:
Код: pascal
1.
2.
3.
4.
pic1 := TPicture.Create;
pic1.LoadFromFile(FileName1);
...
pic1.Destroy;


Отвыкай сразу, иначе толку не будет.
Исключение всегда вероятно, но в данном случае - очень вероятно (оно и происходит) по разным причинам.
Необходимо писать так и только так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
pic1 := TPicture.Create;
try
  pic1.LoadFromFile(FileName1);
  ...
finally
  pic1.Destroy;
end;
...
Рейтинг: 0 / 0
25.09.2019, 12:37
    #39866810
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
Женя32YuRockСлишком радикально.
Надо найти строку с вызовом функции, на которой падает.
И посмотреть на параметры, передающиеся в нее.
Ошибка возникает при загрузки файла, вот на этой строке:
Код: pascal
1.
 pic1.LoadFromFile(FileName1);


В процедуре:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TForm1.LoadImage(FileName1, FileName2: string);
var
  pic1, pic2: TPicture;
begin
       pic1 := TPicture.Create;
       ShowMessage(FileName1);
       pic1.LoadFromFile(FileName1);
       sbmapFs.Width  := pic1.Graphic.Width ;
       sbmapFs.Height := pic1.Graphic.Height;
       sbmapFs.PixelFormat := pf24bit;
       sbmapFs.Canvas.Draw(0, 0, pic1.Graphic);
       pic1.Destroy;
...
end;


...
Битый файл, например.
...
Рейтинг: 0 / 0
25.09.2019, 14:06
    #39866875
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
Может ошибаюсь, но вроде это с TPicture было. Там то ли для компонента с Owner=nil или Parent=nil как раз AV вылетало
...
Рейтинг: 0 / 0
25.09.2019, 14:10
    #39866881
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
повспоминал, повспоминал: нет, это не TPicture был
...
Рейтинг: 0 / 0
25.09.2019, 15:08
    #39866915
V.Borzov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'.
YuRockТеперь поставь там брэйкпоинт, добавь в пути проекта пути исходников VCL/RTL, нажми билд олл и продолжай дебажить (внутрь), пока не найдешь причину. Если есть желание.

Можно не добавлять в пути проекта исходники, а в настройках проекта на закладке "Delphi Compiler/Compiling" включить опцию "Use debug .dcus".
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как исправить?: Access violation at address 77304CB3 in module 'ntdll.dll'. / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]