我正在尝试为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 签名的调用约定和参数是否与目标非托管签名匹配。
我在签名上尝试了许多变体,但无济于事。
有人有线索吗?
干杯,迈克