在结构中如何设置[MarshalAs的参数,得到string的数组形式:
1.
我们得再给C#编译器一些信息,告诉它一些字符数组的大小。然后它们在C#下面长得样子就变成这样: [StructLayout(LayoutKind.Sequential)]
public struct LIBHEADER
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public char[] sLibName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public char[] sPathToLibrary;
public Int32 iEntries;
public Int32 iUsed;
public UInt16 iSort;
public UInt16 iVersion;
public Boolean fContainsSubDirectories;
public Int32 iReserved;
}
2
如果想去掉后面两句的char数组的转换哪代码如下[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct LIBHEADER
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string sLibName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string sPathToLibrary;
public Int32 iEntries;
public Int32 iUsed;
public UInt16 iSort;
public UInt16 iVersion;
public Boolean fContainsSubDirectories;
public Int32 iReserved;
}3.那么如何得到同时是字符串而且是数组的字符串呢/谢谢~~!
1.
我们得再给C#编译器一些信息,告诉它一些字符数组的大小。然后它们在C#下面长得样子就变成这样: [StructLayout(LayoutKind.Sequential)]
public struct LIBHEADER
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public char[] sLibName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public char[] sPathToLibrary;
public Int32 iEntries;
public Int32 iUsed;
public UInt16 iSort;
public UInt16 iVersion;
public Boolean fContainsSubDirectories;
public Int32 iReserved;
}
2
如果想去掉后面两句的char数组的转换哪代码如下[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct LIBHEADER
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string sLibName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string sPathToLibrary;
public Int32 iEntries;
public Int32 iUsed;
public UInt16 iSort;
public UInt16 iVersion;
public Boolean fContainsSubDirectories;
public Int32 iReserved;
}3.那么如何得到同时是字符串而且是数组的字符串呢/谢谢~~!
MarshalAs的作用是 char[256] sPathToLibrary