|
#1
|
||||
|
||||
Проблема с 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. |