在结构中如何设置[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.   

    可是 这跟 MarshalAs 又有什么关系呢?string 到 char[] 一个方法 ToCharArray 就搞定呀
      

  2.   

    他可能是要ASCII的数组字符串
      

  3.   

    这种情况不要用string,如果坚持,我好像看到过一个非安全代码的声明,用来标记string以c里string的方式传递.还是在char[] 与 string之间转换一下吧.
    MarshalAs的作用是 char[256] sPathToLibrary
      

  4.   

    对这个问题不是很了解,我只是看见别人的例子。因为如果用 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]可以开辟一个数组的内存空间,而[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]可以开辟一个字符串的空间,那么如果我想要字符串的数组怎么写呢?至于是不是用MarshalAs,当然我想如果在C#里面除了unsafe就是这个了吧,当然在编译后他们是一样的,都是unsafe的。
      

  5.   

    Marshal.Copy 怎么设置编码格式//分配结构大小的内存空间  IntPtr structPtr = Marshal.AllocHGlobal(size);  //将byte数组拷到分配好的内存空间  Marshal.Copy(bytes, 0, structPtr, size);  //将内存空间转换为目标结构  object obj = Marshal.PtrToStructure(structPtr, type);  //释放内存空间  Marshal.FreeHGlobal(structPtr);