문제

Im 쓰려고 하 C#래퍼 Google WebP 인코더.

방법 im 하려는 전화:

// 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-케이 디코더 래퍼 나는 다음과 같다:

[DllImport("libwebp", CharSet = CharSet.Auto)]
public static extern IntPtr WebPEncodeRGB(IntPtr data, int width, int height, int stride, float quality, ref IntPtr output);

불행하게도 때마다 실행하려고 한다면 다음과 같은 오류가:

전화 를 함수'WebPSharpLib!LibwebpSharp.Native.WebPEncoder::WebPEncodeRGB'는 불균형입니다.이것은 가능성이 높기 때문에 관리 를 서명과 일치하지 않는 관리되지 않는 대상이 서명이 있습니다.는지 확인 전화회고 매개변수의 를 서명과 일치 목표는 관리되지 않는 서명이 있습니다.

내가 노력에 많은 변화 서명은 소용이 없었습니다.

누구나 전혀 모르겠어?

환호 마

도움이 되었습니까?

해결책

가장 큰 원인에 대한 오류는 C++코드를 사용 cdecl 전화 컨벤션이지만 를 사용 stdcall 전화 컨벤션.로 변경 를 다음과 같다:

[DllImport("libwebp", CallingConvention=CallingConvention.Cdecl)]
public static extern UIntPtr WebPEncodeRGB(IntPtr data, int width, int height, 
    int stride, float quality, ref IntPtr output);

할 필요가 없이 지정 CharSet 에 대한 기능이 없는 텍스트 매개 변수입니다.내가 사용하는 것도 UIntPtr 로 반환을 입력후 size_t 가 서명되지 않습니다.

있을 수 있습니다 더 문제 코드와 함께하기 때문에 우리가 볼 수 있는 방법 당신은 함수를 호출하고 또한 우리는 무엇을 알고하지 않 프로토콜에 대한 호출니다.당신이 알아야 할 이상의 기능에 서명하는 방법을 알기 위해 통화 기능이 있습니다.그러나 내가 의심되는 부르 협약에 문제가 당신을 얻을 것이 과거의 현재의 장애물이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top