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