Структуры в unmanaged dll - C#
Формулировка задачи:
Доброго времени суток!
В проекте производится много вычислений. Хочу написать unmanaged dll для ускорения.
На плюсах никогда не кодил толком. Функции, типа сложения двух чисел, одолел.
Но мне надо в dll заполнить структуру. Как пытаюсь:
С++
заголовок
cpp
Все нормально компилится.
Вызываю из шарпа
Получаю "Попытка чтения или записи в защищенную память"
Что-то делаю не так. А что? Вызываю неправильно, или вопрос лучше в ветку с++?
Листинг программы
- typedef struct
- {
- double point[3];
- } ZVertex;
- typedef struct
- {
- ZVertex* vertexes;
- } ZEdge;
- extern "C" { __declspec(dllexport) int GetEdge(ZEdge * edge); }
Листинг программы
- int GetEdge(ZEdge * edge)
- {
- edge->vertexes=new ZVertex[2];
- ZVertex vert1;
- vert1.point[0]=1;
- vert1.point[1]=2;
- vert1.point[2]=3;
- edge->vertexes[0]=vert1;
- ZVertex vert2;
- vert2.point[0]=10;
- vert2.point[1]=20;
- vert2.point[2]=30;
- edge->vertexes[1]=vert2;
- return 0;
- }
Листинг программы
- [DllImport("FuncDll.dll", CallingConvention = CallingConvention.Cdecl)]
- public static extern int GetEdge(ZEdge edge);
- public struct ZVertex
- {
- public double[] point;
- }
- public struct ZEdge
- {
- public ZVertex[] vertexes;
- }
- static void Main(string[] args)
- {
- ZEdge z = new ZEdge();
- GetEdge(z);
- Console.ReadLine();
- }
Решение задачи: «Структуры в unmanaged dll»
textual
Листинг программы
- public struct ZVertex
- {
- [MarshalAs(UnmanagedType.ByValArray, SizeConst=3)]
- public double[] point;
- }
- public struct ZEdge
- {
- public IntPtr vertexes;
- }
- [DllImport("FuncDll.dll", CallingConvention = CallingConvention.Cdecl)]
- public static extern int GetEdge(ref/*или out*/ ZEdge edge);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д