C#调用C++写的Dll,方法参数里面含有结构体指针该怎么处理

由于是公司代码不能向外展示,只能说个大概意思,希望能得到大牛们的帮助
————————————————————————————————

Dll中方法:
void someone(Null,&body);
body是一个结构体,定义如下:

typedef struct _body
{
    unsigned char me;
    char age[16];
    char name[48];
    char high[16];
    BOOL adult;
}body;

在C#中:

方法声明:


    [DllImport("person.dll", CallingConvention = CallingConvention.Cdecl)
        public static extern void someone(IntPtr listWnd,ref body one);

结构体声明

public struct body
{
[MarshalAs(UnmanagedType.U1)]
    public byte me;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
    public string age[16];
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)]
    public string name[48];
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
    public string high[16];
    public bool adult;
}

在调用的时候直接ref的:

public body one;
someone(ref one);

最后打印日志出来,one一直都是空的,获取不到值,求大神相助

看看你的dll怎么写的,是返回一个新的指针,还是根据传入的指针直接修改结构体。
感觉可能是前者。
你的代码原则上没有什么问题
可以用 https://www.cnblogs.com/ye-ming/p/8004314.html 这个代码简单测试下。

把结构体转成intptr类型传进去,再转回对应的结构体