вызвать функцию C со структурой в качестве возвращаемого значения в C # - PullRequest
1 голос
/ 18 ноября 2010

Я просто хочу вызвать функцию C из DLL в C #. Эта функция C возвращает структуру.

Вот объявление .h-файла c dll:

typedef struct t_Point{
 int x;
 int y;
} Point;


Point myFuncs();

Теперь я хочу использовать эту функцию в C #. Wrapper.cs:

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)]
        [return: MarshalAs(UnmanagedType.Struct)]
        public static extern Point myFuncs();
    }
}

Использование выглядит следующим образом:

Point p = Wrapper.myFuncs();

(наименование, вероятно, не самое лучшее)

myFuncs только объявляет структуру, помещает некоторые значения в x и y и возвращает ее. Проблема: значения, которые я получаю в C #, отличаются от значений, сгенерированных в функции C. Это должно быть 4 и 2, и это 0 и 111226272. В чем здесь проблема?

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 18 ноября 2010

Ваш маршалловский код кажется правильным, какова структура пакета неуправляемого метода?LayoutKind.Sequential будет обрабатывать ваши int как 4 байта.Проверьте, правильно ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...