h1dd3n, как пробросить массив такого (C#):
[StructLayout(layoutKind:LayoutKind.Sequential)]
public struct GLLine
{
public float x1;
public float y1;
public float x2;
public float y2;
public float thinkness;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public int[] color;
public GLLine(Line line)
{
x1 = (float)line.X1;
x2 = (float)line.X2;
y1 = (float)line.Y1;
y2 = (float)line.Y2;
color = new int[3] { 256,256,256};
if(line.Stroke is SolidColorBrush)
{
Color c = ((SolidColorBrush)(line.Stroke)).Color;
color[0] = c.R;
color[1] = c.G;
color[2] = c.B;
}
thinkness = (float)line.StrokeThickness;
}
};
в эту фунцию?
void GLAddLineArray(GLLine *line) {
lineBuffer.insert(lineBuffer.end(), line, line + (sizeof(line) / sizeof(line[0])));
}
Если просто писать:
[DllImport(DLL_PATH, CallingConvention = CallingConvention.Cdecl)]
public static extern void GLAddLineArray(GLLine[] line);
То ничего не работает, хотя если по одиночке структуру кидать - все нормально.
[DllImport(DLL_PATH, CallingConvention = CallingConvention.Cdecl)]
public static extern void GLAddLine(GLLine line);