Я буду лаконичен.
У меня есть библиотека, написанная на C ++ с использованием openCV lib.
Одна из моих функций:
EXTERN_HEADER HWND createHandle(FListener fl);
где FListener - указатель на функцию обратного вызова, определяемый как:
typedef void (__stdcall *FListener)
(int fSN, int fC, byte* fSData, IplImage **fS);
IplImage является структурой openCV.
Я пытаюсь использовать эту библиотеку и эти функции в C #, поэтому я DllImport-ing как таковой:
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
delegate void FListener(int fSN, int fC, ref byte fSData, ref IntPtr fS);
[DllImport("FLib.dll", CharSet = CharSet.Auto,
CallingConvention = CallingConvention.Cdecl)]
static extern int createHandle(FListener fl);
и, наконец, я объявляю метод, который будет вызываться обратно в мою программу на c #:
private void test(int fSN, int fC, ref byte fSD, ref IntPtr fS)
{
//how -for the love of God- do I access that openCV double pointer struct
//inside "fS"?
}
Естественно, fS - это указатель на массив указателей, указывающих на IplImages.
Должен ли я снова объявлять структуру IplImage внутри моего кода C #?
Я не хочу использовать какую-либо оболочку C # для openCV. Я хочу, чтобы все было "чисто" и "просто"
но я полностью застрял с составной частью ... Любая помощь будет оценена.
ОБНОВЛЕНИЕ: если я передаю массив fS как IntPtr *, он работает как шарм. Элементы извлекаются как fS [0], fS [1] и т. Д. Если я передаю его как «ref IntPtr», то первый элемент может быть получен как fS, но где я могу найти второй e.t.c.? Я попытался fS + Marshal.SizeOf (typeof (IplImage)) без удачи ... есть идеи?
Нет идей вообще?