急:C#结构中数组字符串的解决方法(MarshalAs)
在结构中如何设置[MarshalAs的参数,得到string的数组形式:
1.
我们得再给C#编译器一些信息,告诉它一些字符数组的大小。然后它们在C#下面长得样子就变成这样:
- C# code
[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数组的转换哪代码如下
- C# code
[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 又有什么关系呢?
string 到 char[] 一个方法 ToCharArray 就搞定呀
[解决办法]
他可能是要ASCII的数组字符串
[解决办法]
这种情况不要用string,如果坚持,我好像看到过一个非安全代码的声明,用来标记string以c里string的方式传递.
还是在char[] 与 string之间转换一下吧.
MarshalAs的作用是 char[256] sPathToLibrary
[解决办法]