Структуры в unmanaged dll - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! В проекте производится много вычислений. Хочу написать unmanaged dll для ускорения. На плюсах никогда не кодил толком. Функции, типа сложения двух чисел, одолел. Но мне надо в dll заполнить структуру. Как пытаюсь: С++ заголовок
Листинг программы
  1. typedef struct
  2. {
  3. double point[3];
  4. } ZVertex;
  5. typedef struct
  6. {
  7. ZVertex* vertexes;
  8. } ZEdge;
  9. extern "C" { __declspec(dllexport) int GetEdge(ZEdge * edge); }
cpp
Листинг программы
  1. int GetEdge(ZEdge * edge)
  2. {
  3. edge->vertexes=new ZVertex[2];
  4. ZVertex vert1;
  5. vert1.point[0]=1;
  6. vert1.point[1]=2;
  7. vert1.point[2]=3;
  8. edge->vertexes[0]=vert1;
  9. ZVertex vert2;
  10. vert2.point[0]=10;
  11. vert2.point[1]=20;
  12. vert2.point[2]=30;
  13. edge->vertexes[1]=vert2;
  14. return 0;
  15. }
Все нормально компилится. Вызываю из шарпа
Листинг программы
  1. [DllImport("FuncDll.dll", CallingConvention = CallingConvention.Cdecl)]
  2. public static extern int GetEdge(ZEdge edge);
  3. public struct ZVertex
  4. {
  5. public double[] point;
  6. }
  7. public struct ZEdge
  8. {
  9. public ZVertex[] vertexes;
  10. }
  11. static void Main(string[] args)
  12. {
  13. ZEdge z = new ZEdge();
  14. GetEdge(z);
  15. Console.ReadLine();
  16. }
Получаю "Попытка чтения или записи в защищенную память" Что-то делаю не так. А что? Вызываю неправильно, или вопрос лучше в ветку с++?

Решение задачи: «Структуры в unmanaged dll»

textual
Листинг программы
  1.         public struct ZVertex
  2.         {
  3.             [MarshalAs(UnmanagedType.ByValArray, SizeConst=3)]
  4.             public double[] point;
  5.         }
  6.  
  7.         public struct ZEdge
  8.         {
  9.             public IntPtr vertexes;
  10.         }
  11.  
  12.         [DllImport("FuncDll.dll", CallingConvention = CallingConvention.Cdecl)]
  13.         public static extern int GetEdge(ref/*или out*/ ZEdge edge);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы