У меня есть следующий интерфейс встроенной функции на C ++:
int func1(void* param, int sizeOfParam).
В документации представлен следующий пример вызова:
typedef struct
{
int x;
int y;
int width;
int height;
} Rect;
Rect rect;
int func1((void*)&rect, sizeof(rect));
Мне нужно вызвать эту функцию из кода C #.
У меня есть следующий заголовок на C # от разработчиков собственной библиотеки:
[DllImport(NATIVE_DLL_NAME,
CallingConvention = CallingConvention.Cdecl,
EntryPoint = "func1")]
private static extern int func1(IntPtr param, int sizeOfParam);
У меня также есть следующая структура C # Rect
:
public struct Rect
{
int x;
int y;
int width;
int height;
};
Мне нужно вызвать func1
в C # code и pass Rect
:
Я делаю следующее:
Rect rect = new Rect();
int rectSize = System.Runtime.InteropServices.Marshal.SizeOf(rect);
func1(???, rectSize);
Что поместить в позицию ???
, где rect
следует передать (но это невозможно из-за несовместимых типов)?
Кажется, что IntPtr
нужно передать, а затем преобразовать в struct rect
. Как этого добиться?
( rect
здесь выходной параметр)
ОБНОВЛЕНИЕ:
Желательно не изменять сигнатуры кода C ++ и оболочки C # - это код третьей части.
Более того, это не всегда переменная . Rect
передается как первый параметр func1