0

Mono for Android アプリケーション内で Android で PDF ドキュメントをレンダリングしようとしています。C で記述された MuPdf ライブラリを使用していますが、1 つの C 関数の呼び出しに問題があります。私が得るもの:

System.EntryPointNotFoundException: fz_pixmap_samples

C 関数:

unsigned char *fz_pixmap_samples(fz_context *ctx, fz_pixmap *pix)
{
    if (!pix)
        return NULL;
    return pix->samples;
}

私のC#ラッパー:

public class APV
{
    [DllImport("libmupdf.so", EntryPoint = "fz_pixmap_samples", CallingConvention = CallingConvention.Cdecl)]
    private static extern IntPtr fz_pixmap_samples(IntPtr ctx, IntPtr pix);

    public static IntPtr GetSamples(IntPtr ctx, IntPtr pix)
    {
        return fz_pixmap_samples(ctx, pix);
    }
}

GetSamples を呼び出す方法:

APV.GetSamples(context, pix);

関数 fz_pixmap_samples(fz_context *ctx, fz_pixmap *pix) は、ビットマップ データへのポインターを返す必要があります。unsigned char * を IntPtr にマッピングするのは正しくないと思いますか? 誰でも助けてもらえますか?

4

2 に答える 2

0

System.EntryPointNotFoundException: fz_pixmap_samples

は、ライブラリが という名前の関数をエクスポートしないことを意味しますfz_pixmap_samples。ほとんどの場合、関数が別の名前でエクスポートされることを意味する名前の装飾があります。

EntryPoint最初に行うことは、マネージ コードが装飾された名前を検索できるようにする引数を削除することです。

それでもうまくいかない場合は、.so ライブラリ ファイルを調べて、関数のエクスポートに使用されている名前を正確に調べる必要があります。そして、それを p/invoke 宣言で使用します。

于 2013-03-29T17:05:23.223 に答える