Показать сообщение отдельно
  #1  
Старый 21.01.2017, 05:49
Аватар для Lothlorien
Lothlorien Lothlorien вне форума
Новичок
 
Регистрация: 06.04.2011
Адрес: Солнечная система
Сообщения: 69
Версия Delphi: 7.0
Репутация: 12
По умолчанию Проблема с DLL

Всем привет!

Решил свою несложную игру научить сохранять скриншоты в формате PNG. Нашел дельфийские модули по работе с этим форматом, исправно выполняют свое дело. Но, увы, в них почти 7000 строк кода, а это чуть не 1/3 от всей моей игры; компиляция заметно затягивается.

Решил написать DLL-ку, которая использует модуль PNGImage и экспортирует функции взаимного конвертирования BMP - PNG. Выглядит это примерно так:
Код:
{...}
uses PNGImage;
{...}
function BMPtoPNG(const BMP: pBitmap): pPNG;
var PNG: TPNGObject;
begin  
  PNG:=TPNGObject.Create;
  try
    PNG.Assign(BMP^);
  finally
    Result:=@PNG;
  end;
end;
{...}
exports BMPtoPNG;

Проблемы это не решило, так как в программе все равно приходится объявлять тип pPNG, ссылающийся на TPNGObject (а он описан в массивном модуле на тысячи строк)...
Код:
type pPNG = ^TPNGObject;
pBitmap = ^TBitmap;

function BMPtoPNG(const BMP: pBitmap): pPNG; external 'pngimg.dll';

К тому же, попытка конвертирования приводит к Access Violation. Видимо, я неправильно использую указатели? А раз нужно объявлять ссылку на TPNGObject, то весь модуль PNGImage будет все равно добавлен в код и откомпилирован, и тогда нет смысла биться над DLL-библиотекой...

Есть решение у этой проблемы? Или не париться, выкинуть все модули для PNG и спокойно сохраняться в BMP или JPEG?
__________________
Ne timeas obscurum.
Ответить с цитированием