Как преобразовать собственный Память C ++ в структуру C #?

У меня есть следующий интерфейс встроенной функции на 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

7
задан sergtk 3 October 2011 в 11:16
поделиться