由于是公司代码不能向外展示,只能说个大概意思,希望能得到大牛们的帮助
————————————————————————————————
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类型传进去,再转回对应的结构体