[英]Is a C# struct ever boxed when declared as the return value of a function?
[英]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.