Маршалинг структур C в C #

Предположим, у меня есть структура:

typedef struct {
float x;
float y;
float z;
int   ID;
} Vertex;

и функция C ++:

float first(Vertex* ptr, int length){ //really silly function, just an example
    Vertex u,v;
    u.x = ptr[0].x; //...and so on, copy x,y,z,ID
    v.x = ptr[1].x; 
    return (u.x * v.x + u.y * v.y + u.z * v.z);
    }


Vertex* another(float a, int desired_size){
    Vertex v = (Vertex*)malloc(desired_size*sizeof(Vertex));
    v[0].x = a;
    v[1].x = -a; //..and so on.. make some Vertices.
    return v;
}

Сначала - моя IDE. Я использую Visual Studio 2010, создаю приложение на C # (4.0); Часть C ++ также встроена в VS2010.

Я знаю, как создать DLL кода C / C ++ и использовать его в приложении C #, но до сегодняшнего дня я использовал только примитивные аргументы и возвращаемые значения, например:

    [DllImport("library.dll", CharSet = CharSet.Ansi, SetLastError = true, CallingConvention = CallingConvention.StdCall)]
    public static extern int simple(int a, int b);

Сегодня мне нужно передать массив of структур (как в примере выше) .. и, возможно, также получить обратно ..

Как "перевести" класс C # в структуру C (и наоборот) ??

8
задан David Heffernan 30 November 2011 в 21:12
поделиться