0

flashzlibをフラッシュ プロジェクトの 1 つに統合しています。プロジェクトのドキュメントで述べたように。libz.a と zlbc を正常に生成し、適切な場所にライブラリとヘッダーをプッシュしました。

今、私はこの小さなラッパー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) + "");

しかし、フラッシュ ファイルはこの最後の行で失敗します。何が欠けているのかわからない。zlbc ファイルは 340KB ですが、example.swc はわずか 80KB です。

4

1 に答える 1

1

2 つの理由のいずれかで失敗しています。Alchemy が見つからないかz.l.bc(そして、それについてわざわざ知らせようとしない)、エラー コードを正しくキャッチして報告していないかのいずれかです。

質問のコメントで述べたように、inflateInit呼び出し時にランタイム エラーが発生しました。$ALCHEMY_HOME/usr/local/lib私の場合、Alchemy が想定どおりに検索していないことが判明しましたz.l.bc。これは、/usr/local/lib代わりに移動することで解決されました。その後、コードはZ_OK期待どおりに返されました。

すべての呼び出しがコメントアウトされていることに気付きました。これは、次の無条件ブロックで呼び出しのエラーをチェックしていないためCHECK_ERR、初期リターンをコメントアウトすると無限ループに入るということです。私にとっては、テスト目的でUTFバイトを渡していたので戻ってきました。example.c:52inflateforinflateZ_DATA_ERROR

テストといえば、flashzlib が提供する小さなテスト スイートがあることに気付きました。

このコードを借りて、名前を に変更mainし、 ¹test_allへの呼び出しをコメント アウトし、すべての呼び出しを代わりに への呼び出しに置き換えました²。結果は次のとおりです。test_gzioprintffprintfstderr

zlib バージョン 1.2.3 = 0x1230、コンパイル フラグ = 0x2000095

uncompress(): こんにちは、こんにちは!

inflate(): こんにちは、こんにちは!

large_inflate(): OK

inflateSync() の後: こんにちは、こんにちは!

辞書で膨らませる: こんにちは、こんにちは!

0

すべてが順調に見えます。


脚注:
¹ もちろん、Alchemy ではファイルにアクセスできません。
²stdoutは切断されていstderrますが、トレース コンソールに表示されます

于 2011-11-11T05:16:39.677 に答える