我只想从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.这里有什么问题?
感谢您的帮助!
答案 0 :(得分:0)
您的马歇尔代码似乎正确,非托管方法的包布局是什么? LayoutKind.Sequential会将您的整数视为4个字节。检查这是否正确。