日期:2014-05-18  浏览次数:20851 次

急: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
------解决方案--------------------
探讨
可是 这跟 MarshalAs 又有什么关系呢?

string 到 char[] 一个方法 ToCharArray 就搞定呀