使用struct调用C函数作为C#中的返回值

时间:2010-11-18 09:45:34

标签: c# c struct invoke

我只想从C#中的DLL调用C函数。这个C函数返回一个结构。

这里是c dll的.h文件声明:

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 :(得分:0)

您的马歇尔代码似乎正确,非托管方法的包布局是什么? LayoutKind.Sequential会将您的整数视为4个字节。检查这是否正确。