Попытка считать файл библиотекой ZenGL

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Попытка считать файл библиотекой ZenGL

Сообщение DjRFT » 09.03.2012 14:37:12

Здравствуйте. Возникла щикатливая ситуация. В библиотеке ZenGL описана процедура, которая считывает картинку из файла и загружает ее в опасанный ранний тип:
Код: Выделить всё
tex_LoadFromFile   : function( const FileName : String; TransparentColor : LongWord = $FF000000; Flags : LongWord = TEX_DEFAULT_2D ) : zglPTexture;

это процедура.
Вызывается она таким образом:
Код: Выделить всё
NameTemp:= 'gfx/' + Name + '.png';
loadedTextures[Length(loadedTextures) - 1].tex := tex_loadFromFile(NameTemp, $FF000000, TEX_DEFAULT_2D);
     

Пусть стригновая переменная Name хранит значение: 'xxx'.
Получается, что в переменной NameTemp значение: 'gfx/xxx.png'. При попытки исполнить код, вылетает исключение: "External: SIGSEGV".
Но если пойти в лоб и место переменной в вызове процедуры написать прямой путь(т.е. так: ...... tex_loadFromFile('gfx/xxx.png', $FF000000, TEX_DEFAULT_2D);), то все прекрасно работает! В чем может быть проблема? Это баг Lazarus, или я что-то не верно делаю?
Ось: Microsoft Windows XP Home Edition Service Pack 3
Версия Lazarus: 0.9.30
DjRFT
незнакомец
 
Сообщения: 3
Зарегистрирован: 09.03.2012 14:18:30

Re: Попытка считать файл библиотекой ZenGL

Сообщение FedeX » 09.03.2012 16:01:05

Давно не писал на Паскале, но кажется надо так:

loadedTextures[Length(loadedTextures) - 1].tex := tex_loadFromFile(PChar(NameTemp), $FF000000, TEX_DEFAULT_2D);

Если ZenGL всё ещё реализован в виде dll библиотеки, то скорее всего он принимает в функциях указатели на нуль-терминальные строки. А поскольку NameTemp тоже какбы указатель (на паскалевскую строку которая совсем не обязана заканчиваться нулем) то ошибки при компиляции не происходит - она происходит уже во время выполнения. PChar() каким-то макаром позволяет преобразовать паскалевскую строку в нультерминальную. Константы преобразовываются автоматом в то что нужно функции, потому ошибки с константой и небыло.
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Попытка считать файл библиотекой ZenGL

Сообщение DjRFT » 09.03.2012 17:23:36

Не помогает... Все тот же класс исключения выводит :( Да, ZenGL все еще в виде dll реализована.
DjRFT
незнакомец
 
Сообщения: 3
Зарегистрирован: 09.03.2012 14:18:30

Re: Попытка считать файл библиотекой ZenGL

Сообщение Andru » 09.03.2012 20:59:29

Есть же официальный форум у библиотеки... :) А ситуация сама по себе странная, из того кусочка кода никаких вариантов падения представить не могу. Окромя как всё же некорректного Name и последующего падения при попытке обратится к loadedTextures[Length(loadedTextures) - 1].tex, т.к. сам по себе ZenGL просто вернёт nil если не найдёт файл. К тому же все стандартные примеры ZenGL используют комбинирование пути из строки dirRes(содержащей относительный путь '../data/') и собственно имени самого файла.
Аватара пользователя
Andru
новенький
 
Сообщения: 13
Зарегистрирован: 28.09.2010 10:42:53

Re: Попытка считать файл библиотекой ZenGL

Сообщение DjRFT » 09.03.2012 23:53:18

Есть оффициальный форум? Извините не наткнулся на него и написал сюда :D. Значение в Name верное, это точно, проверял в Lazarus через наблюдение. Может у меня проблема с самой длл? У меня есть две версии длл, они отличаются весом буквально байтами, но работают совершенно по разному. Одна ошибки в этой строке не видит, но не чего не прорисовывает(черный экран). Другая соответственно кричит об этой ошибке...

Добавлено спустя 21 минуту 40 секунд:
Все :) Разобрался. Действительно был виноват ZenGL.dll. Я скачал дирекс икс версию, собрал и подключил ее. Все работает как часы. Спасибо всем кто откликнулся!
DjRFT
незнакомец
 
Сообщения: 3
Зарегистрирован: 09.03.2012 14:18:30


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 237

Рейтинг@Mail.ru