Я просто хочу вызвать функцию C из DLL в C#. Эта функция C возвращает структуру.вызывать функцию C со структурой как возвращаемое значение в C#
Здесь .h-файл декларация библиотека C:
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 объявляет только на структуру, ставит некоторые значения х и у и возвращает его. Проблема: значения, которые я получаю на C#, отличаются от значений, сгенерированных в функции C. Это должно быть 4 и 2, и это 0 и 111226272. В чем проблема?
Спасибо за помощь!
Угадайте, что это что-то с различиями в типах: попробуйте C# 'short' вместо' int' и попробуйте с 'uint' или' ushort'. Можете ли вы опубликовать байты, выводимые процессом (так, прежде чем C# попытается создать структуру из них)? –
Всегда ли он возвращается 111226272 или число меняется каждый раз? –
Не забудьте убедиться, что соглашение о вызове верное (cdecl/fast-call и т. Д.). См. Здесь: http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.callingconvention.aspx – plinth