Я использую обратный вызов из C # в C ++ с использованием функции rVDACQ_Connect
, которая возвращает структуру, я знаю, что у меня есть структура в правильном формате, так как я тестировал структуру отдельно. Функция принимает параметры: C ++
tVDACQ_CallBackRec* (_stdcall* rVDACQ_Connect)(int, tVDACQ_CallBackProc, void*, short*, int);
, где tVDACQ_CallBackRec
является возвращаемой структурой.
Я хочу знать, что эквивалентные типы параметров будут в C #.
tVDACQ_CallBackRec VDACQ_Connect(int i, [MarshalAs(UnmanagedType.FunctionPtr)] tVDACQ_CallBackProc proc, IntPtr n, IntPtr[] buffer, int j)
Это то, что у меня уже есть. Я попытался использовать IntPtr в качестве части C ++, в которой функция использует ключевое слово this
для параметра void*
, а использование IntPtr
вернуло ошибку, так как «Тип метода не совместим с PInvoke».
Частью проблемы также может быть short*
, например, когда параметр передается в функцию в коде C ++, когда используется short[]
, отсюда и причина IntPtr[]
.
Я ожидал бы, что структура будет возвращена, но я также мог бы изменить тип возвращаемого значения на IntPtr
и затем сделать Marshal.PtrToStructure
.