2

iPhoneプロジェクトにlibpngを追加しようとしています。

.cファイルと.hファイルを独自のディレクトリ「thirdparty/libpng /」にコピーし、png.hをテクスチャクラスにインクルードしました。

#ifndef PNG_H
    #include "thirdparty/libpng/png.h"
#endif

この時点で、私のプロジェクトは警告やエラーなしでうまくコンパイルされます。

次に、テクスチャがpngであるかどうかを確認する関数を追加しようとしましたが、png.hが含まれていても、png_sig_cmpでコンパイルエラーが発生します。

#define PNG_BYTES_TO_CHECK 4
int GETexture::CheckIfValidPNGTexture( const char* pTextureName, FILE **ppFp )
{
    char buf[PNG_BYTES_TO_CHECK];

    /* Open the prospective PNG file. */
    if ((*ppFp = fopen(pTextureName, "rb")) == NULL)
        return 0;

    /* Read in some of the signature bytes */
    if (fread(buf, 1, PNG_BYTES_TO_CHECK, *ppFp) != PNG_BYTES_TO_CHECK)
        return 0;

    /* Compare the first PNG_BYTES_TO_CHECK bytes of the signature.
     Return nonzero (true) if they match */

    return(!png_sig_cmp(buf, (png_size_t)0, PNG_BYTES_TO_CHECK)); // <- COMPILE ERROR

}

私が得るエラーは次のとおりです:'png_sig_cmp'の呼び出しに一致する関数がありません

ヘッダーは間違いなく含まれています。「sdfdd」のようにランダムに入力しようとすると、コンパイルエラーが発生し、そのヘッダーファイルを解析していることが示されます。

何か案は?

4

1 に答える 1

3

私は一度まったく同じ問題を抱えていましたが、簡単なキャストが役に立ちました.png.hヘッダーファイルを調べると、png_sig_cmpの定義:

 png_sig_cmp(png_const_bytep sig, png_size_t start, png_size_t num_to_check)

最初のパラメーターはpng_const_bytepで、次のように定義されています。

PNG_CONST png_byte        FAR * png_const_bytep

実際には次のように翻訳されました:

const unsigned char* 

私は単純なタイプキャストをします:

return(!png_sig_cmp((png_const_bytep)buf, (png_size_t)0, PNG_BYTES_TO_CHECK));

それが役に立てば幸い!

于 2012-10-06T10:36:14.827 に答える