//Define Method
typedef struct {
int ints;
int intarray[5];
char chars;
char chararray[5];
double floats;
double floatarray[5];
int* intPoint;
int* intPointarray[5];
}Strusts;
下图为C#中定义的结构体:
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 0)]
public struct Strusts
{
public int ints;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public int[] intarray;
public char chars;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
public string chararray;
public System.Double floats;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public System.Double[] floatarray;
public IntPtr intPoint;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public IntPtr[] intPointarray;
};
1、整形指针及整形指针数组,在C#里面能返回地址,但是每个指针指向的地址相差都是12,这样是不是有问题?
2、我想取地址里的数据,但是怎么都取不出来,我试过了Marshal.Copy()、IntPtr加地址偏移的方法、反正我知道的方法都试过了,取出来的数据都是不对的,整个过程没有报错。
3、希望各位老师能帮忙指点一下,非常感谢!我是初学者,基础知识不是很好,自己也买了一些书籍在看。
2 个解决方案
#1
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 0)]
0是采用系统默认值,不推荐使用
修改为 Pack = 1试试
具体对应可以参考这篇文章
http://blog.csdn.net/Donjuan/article/details/3865026
0是采用系统默认值,不推荐使用
修改为 Pack = 1试试
具体对应可以参考这篇文章
http://blog.csdn.net/Donjuan/article/details/3865026
#2
谢谢!
之前Pack=0-4之间我都试过,取出来的数据都是不对的。
之前Pack=0-4之间我都试过,取出来的数据都是不对的。
#1
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 0)]
0是采用系统默认值,不推荐使用
修改为 Pack = 1试试
具体对应可以参考这篇文章
http://blog.csdn.net/Donjuan/article/details/3865026
0是采用系统默认值,不推荐使用
修改为 Pack = 1试试
具体对应可以参考这篇文章
http://blog.csdn.net/Donjuan/article/details/3865026
#2
谢谢!
之前Pack=0-4之间我都试过,取出来的数据都是不对的。
之前Pack=0-4之间我都试过,取出来的数据都是不对的。