Я пытаюсь просто скопировать один буфер в другой, передав два указателя в функцию C ++, которая вызывается C # -Code.
Также пробовал:
[DllImport(dllName, CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr ConvertYUV420pToRGB24(byte[] src, byte[] dst);
C ++ - Функция:
extern "C" __declspec(dllexport) uint8_t* __stdcall ConvertYUV420pToRGB24(uint8_t* src, uint8_t* dst) {
errno_t err;
err = memcpy_s(dst, 3110400, src, 3110400);
if (err)
return NULL;
else
return dst;
}
DLLImport
[DllImport(dllName, CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr ConvertYUV420pToRGB24(IntPtr src, IntPtr dst);
вызывающий код C #
GCHandle srcPtr;
GCHandle dstPtr;
byte[] result = new byte[3110400];
byte[] srcFrame = new byte[3110400];
srcPtr = GCHandle.Alloc(srcFrame);
dstPtr = GCHandle.Alloc(result);
FFmpegInterface.ConvertYUV420pToRGB24(GCHandle.ToIntPtr(srcPtr), GCHandle.ToIntPtr(dstPtr));
Результат: нарушение прав доступа
Ожидается: просто скопируйте