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

Вниз

Ошибка PBitMap, начиная с 2.13   Найти похожие ветки 

 
BMouradov   (2005-10-10 16:07) [0]

Начиная с версии 2.13 проявляется вот такая ошибка:

bmp := PbitMap(0, 0);
...
bmp.Width := 99;
...
bmp.Width := 100;

В этот момент возникает ошибка EInvalidPoiter.
В WindowsXP эта ошибка не возникает, в 98-м - возникает.
Привести точный код пока не могу, надо многое выкинуть из текста, если надо - могу проделать эту работу.
Точно проверил, что в 2.12 этот код нормально работает, а в 2.13 и 2.14 - нет.


 
Vladimir Kladov   (2005-10-10 21:11) [1]

спасибо, а я думал, что уже все нашел. Просто в 2.13 изменился способ хранения dib-bitmap"ов, память выделяется теперь через GlobalAlloc, ну и соответственно, попытка освободить ее другим способом вызывает неприятности. Исправлю, конечно же.


 
miek ©   (2005-10-11 13:59) [2]

globalAlloc? то есть, теперь при вылете программы все занятые ею битмапы останутся и будут в памяти? это не есть хорошо.


 
Vladimir Kladov   (2005-10-11 18:41) [3]

я пока не смог воспроизвести, в 2.14.

В какой памяти, что это вы право. В NT вся память процесса освобождается при любом способе завершения. В 9х она по-любому не освобождается. Потому что программа на Delphi в конечном счете кучу выделяет через GlobalAlloc, а при вылете она не освобождается, и после нескольких "недопустмых" все равно надо перезагружаться. Зато теперь правильно работает SetDibitsToDevice и StretchDibits, для битмапов любого размера.


 
BMouradov   (2005-10-12 11:16) [4]

Постараюсь выделить нужную последовательность команд. Сразу пришлю.


 
BMouradov   (2005-10-12 19:40) [5]

Вот такой код у меня выдает ошибку под Win98 и не даёт под WinXP. Напоминаю, что это 2,14, под 2,12 этой ошибки нет.

program Project1;

uses
 KOL;

var FMap: PBitMap;
begin
 FMap := NewBitMap(1, 1);
 FMap.PixelFormat := pf24bit;
 FMap.Width := 100;
end.


 
Vladimir Kladov   (2005-10-12 21:18) [6]

такое ощущение, что я у себя уже исправил, и в 2.15 будет правильно. Подождите до пятницы.


 
BMouradov   (2005-10-18 20:16) [7]

Нет. Только что попробовал 2.15 - ошибка не исчезла. Тот же код, в том же месте. Забыл написать - Win98, режим 16-цветный.

Код 2.16 попробовать не могу - не компилируется.


 
Vladimir Kladov   (2005-10-19 07:40) [8]

Сказал же: добавить ICON_DIFF_WH в опции, пересобрать пакет (не Compile, а BUILD)


 
BMouradov   (2005-10-19 18:35) [9]

Попробовал 2.17 - ошибка не исчезла. Тот же код, в том же месте.


 
Vladimir Kladov   (2005-10-20 09:09) [10]

win98 у меня нет (и нескоро будет возможность сделать, только если под vmware). А другие режимв, кроме 16 цветов - пробовали? Хотелось бы уточнить,  что там такое может быть до того как идти все ломать.


 
BMouradov   (2005-10-20 11:16) [11]

Мне присылали информацию несколько человек из разных операционок и разных видеорежимов, В том числе Win2000. Я у себя нигде повторить не смог, кроме как под wmware. А под wmware не смог настроить другую цветность, увы.

Если подскажете, как я смогу помочь (проследить, например, на какой строке в KOL вылезает ошибка) подскажите.


 
Vladimir Kladov   (2005-10-20 21:13) [12]

нашел: в KOL.pas в строке примерно 53935 надо заменить FreeMem( NewBits на GlobalFree( NewBits
Проявлялось только в 98 (хотя конечно неверно было и в NT, это же leak чистый). Завтра вечером если силы еще будут обновлю все новые исправления.


 
BMouradov   (2005-10-21 12:18) [13]

Спасибо, теперь всё работает!



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

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

Наверх




Память: 0.49 MB
Время: 0.045 c
1-1148895763
Jolik
2006-05-29 13:42
2006.07.09
Имя процедуры...


15-1149787637
Тот же самый
2006-06-08 21:27
2006.07.09
Linux must die


2-1151061195
.ruslan
2006-06-23 15:13
2006.07.09
простое увеличение времени TDateTime


1-1148850283
тт
2006-05-29 01:04
2006.07.09
Как вставить в таблицу Word минусы?


2-1150414507
GodsKeeper
2006-06-16 03:35
2006.07.09
Народ спасайте, диплом горит.