繁体   English   中英

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

[英]invoke C function with struct as return value in C#

我只想从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。这是什么问题?

谢谢你的帮助!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM