Привет всем! Я пытаюсь получить данные от моего неуправляемого c-dll.Функция c ожидает указатель на структуру, инициализирует структуру с некоторым значением и завершает работу.Ошибка может быть где угодно, даже в объявлении cll.(Я делаю это в первый раз)
Здесь h-файл кода c:
#ifndef MYFUNCS_H
#define MYFUNCS_H
__declspec(dllexport) typedef struct t_Point{
int x;
int y;
} Point;
__declspec(dllexport) Point myFuncs();
__declspec(dllexport) int getPoint(Point* point);
#endif
c-файл:
#include "stdafx.h"
#include "OpenCVTest.h"
int getPoint(Point* point){
point->x = 4;
point->y = 2;
return 0;
}
Оболочка в c #:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace CSharp_mit_OpenCV
{
[StructLayout(LayoutKind.Sequential)]
public struct Point
{
public int x;
public int y;
};
class Wrapper
{
[DllImport("OpenCV Test.dll", CharSet= CharSet.Auto)]
public static extern int getPoint(ref Point point);
}
}
И функция c #, которая использует эту оболочку:
Point p = new Point();
Wrapper.getPoint(ref p);
textBox1.Text = p.x.ToString();
textBox2.Text = p.y.ToString();
С этим кодом я получаю следующую ошибку времени выполнения:
"Вызов функции PInvoke'CSharp mit OpenCV! CSharp_mit_OpenCV.Wrapper :: getPoint "разбалансировал стек. Вероятно, это связано с тем, что управляемая подпись PInvoke не соответствует неуправляемой целевой подписи. Проверьте, что соглашение о вызовах и параметры подписи PInvoke соответствуют целевой неуправляемой подписи."
Что здесь не так?Пожалуйста помоги!Спасибо всем!