Есть ли жизнеспособное преобразование void * из C ++ в C # - PullRequest
0 голосов
/ 06 ноября 2019

Я использую обратный вызов из 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.

...