GoogleのWebPエンコーダー用のC#ラッパーを作成しようとしています。
呼び出そうとしているメソッドは次のとおりです。
// Returns the size of the compressed data (pointed to by *output), or 0 if
// an error occurred. The compressed data must be released by the caller
// using the call 'free(*output)'.
WEBP_EXTERN(size_t) WebPEncodeRGB(const uint8_t* rgb,
int width, int height, int stride,
float quality_factor, uint8_t** output);
mc-kayのデコーダラッパーから借りて、私は次のことを思いついた:
[DllImport("libwebp", CharSet = CharSet.Auto)]
public static extern IntPtr WebPEncodeRGB(IntPtr data, int width, int height, int stride, float quality, ref IntPtr output);
残念ながら、これを実行しようとすると、次のエラーが発生します。
PInvoke関数'WebPSharpLib!LibwebpSharp.Native.WebPEncoder :: WebPEncodeRGB'の呼び出しにより、スタックのバランスが崩れました。これは、マネージドPInvokeシグニチャがアンマネージドターゲットシグニチャと一致しないことが原因である可能性があります。PInvokeシグニチャの呼び出し規約とパラメータがターゲットのアンマネージドシグニチャと一致することを確認してください。
私は署名の多くのバリエーションを試しましたが、役に立ちませんでした。
誰かが手がかりを得ましたか?
乾杯、マイク