использование flashzlib во флеш проект - PullRequest
0 голосов
/ 08 ноября 2011

Я интегрирую flashzlib в один из моих флеш-проектов. Как указано в документации проекта. Я успешно создал libz.a и z.l.bc и поместил библиотеки и заголовки в соответствующие места.

Теперь я написал эту маленькую оболочку https://gist.github.com/65d3c7ff683b326ecd22. Это прекрасно компилируется с использованием:

gcc example1_as3.c -lz -O3 -Wall -swc -o example.swc

Это включено во флеш-проект следующим образом (uncompressedData - это byteArray):

private var loader:CLibInit = new CLibInit;
private var lib:Object = loader.init();
logger.info("B : " + lib.returnString(uncompressedData, uncompressedData.length) + "");

Но флэш-файл завершается с ошибкой в этой последней строке. Я не уверен, что мне не хватает. Размер файла z.l.bc составляет 340 КБ, а файла example.swc - всего 80 КБ.

1 Ответ

1 голос
/ 11 ноября 2011

Сбой по одной из двух причин. Либо Алхимия не находит z.l.bc (и не удосуживается рассказать вам об этом), либо вы неправильно ловите и сообщаете свои коды ошибок.

Как я упоминал в комментариях к вопросу, я получал ошибку времени выполнения при вызове inflateInit. В моем случае оказалось, что Алхимия не ищет $ALCHEMY_HOME/usr/local/lib для z.l.bc, как это должно было быть. Это было решено путем перемещения его на /usr/local/lib. После этого ваш код вернул Z_OK, как и ожидалось.

Я заметил, что вы закомментировали все вызовы CHECK_ERR, что означает, что вы войдете в бесконечный цикл, если закомментируете досрочное возвращение example.c:52, так как вы не проверяете ошибки на inflate вызов в следующем безусловном for блоке. Для меня inflate возвращал Z_DATA_ERROR, поскольку я просто передавал ему несколько байтов UTF для целей тестирования.

Говоря о тестировании, я заметил, что есть небольшой набор тестов, предоставляемый flashzlib:

Я позаимствовал этот код, переименовал main в test_all, закомментировал вызов на test_gzio ¹ и заменил все printf вызовы fprintf на stderr вместо². Это результат:

zlib version 1.2.3 = 0x1230, compile flags = 0x2000095

uncompress(): hello, hello!

inflate(): hello, hello!

large_inflate(): OK

after inflateSync(): hello, hello!

inflate with dictionary: hello, hello! 

0

Кажется, все в порядке.


Сноски:
¹ Нет доступа к файлам в Алхимии, конечно.
² stdout отключен для меня, но stderr появляется в моей консоли трассировки

...