• 全部
...

急:C#结构中数组字符串的解决方法(MarshalAs)

立在心间 2010-05-13 10:29:50
在结构中如何设置[MarshalAs的参数,得到string的数组形式:
1.
我们得再给C#编译器一些信息,告诉它一些字符数组的大小。然后它们在C#下面长得样子就变成这样:

  1. [StructLayout(LayoutKind.Sequential)]
  2. public struct LIBHEADER
  3. {
  4. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
  5. public char[] sLibName;
  6. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
  7. public char[] sPathToLibrary;
  8. public Int32 iEntries;
  9. public Int32 iUsed;
  10. public UInt16 iSort;
  11. public UInt16 iVersion;
  12. public Boolean fContainsSubDirectories;
  13. public Int32 iReserved;
  14. }


2
如果想去掉后面两句的char数组的转换哪代码如下

  1. [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
  2. public struct LIBHEADER
  3. {
  4. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
  5. public string sLibName;
  6. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
  7. public string sPathToLibrary;
  8. public Int32 iEntries;
  9. public Int32 iUsed;
  10. public UInt16 iSort;
  11. public UInt16 iVersion;
  12. public Boolean fContainsSubDirectories;
  13. public Int32 iReserved;
  14. }



3.那么如何得到同时是字符串而且是数组的字符串呢/

谢谢~~!
...全文
给本帖投票
1117 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdsuper 2012-03-19
  • 打赏
  • 举报
回复
Marshal.Copy 怎么设置编码格式

//分配结构大小的内存空间

  IntPtr structPtr = Marshal.AllocHGlobal(size);

  //将byte数组拷到分配好的内存空间

  Marshal.Copy(bytes, 0, structPtr, size);

  //将内存空间转换为目标结构

  object obj = Marshal.PtrToStructure(structPtr, type);

  //释放内存空间

  Marshal.FreeHGlobal(structPtr);
csdsuper 2012-03-19
  • 打赏
  • 举报
回复
哇,2天真久都一个月了还没结贴
立在心间 2012-02-20
  • 打赏
  • 举报
回复
这个问题已经解决了,忘了结贴了,过两天我找以下一些我解决的源代码贴出来,分享大家,谢谢~
mrsupersky 2012-01-11
  • 打赏
  • 举报
回复
那就用指针吧
立在心间 2010-05-19
  • 打赏
  • 举报
回复

自己继续 顶!
立在心间 2010-05-14
  • 打赏
  • 举报
回复
自己顶!
没有人遇到这个问题啊~~
mayonglong 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 simonezhlx 的回复:]
可是 这跟 MarshalAs 又有什么关系呢?

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

Mark`
WillWang 2010-05-13
  • 打赏
  • 举报
回复
这种情况不要用string,如果坚持,我好像看到过一个非安全代码的声明,用来标记string以c里string的方式传递.

还是在char[] 与 string之间转换一下吧.
MarshalAs的作用是 char[256] sPathToLibrary
SaintLance 2010-05-13
  • 打赏
  • 举报
回复
他可能是要ASCII的数组字符串
simonezhlx 2010-05-13
  • 打赏
  • 举报
回复
可是 这跟 MarshalAs 又有什么关系呢?

string 到 char[] 一个方法 ToCharArray 就搞定呀
立在心间 2010-05-13
  • 打赏
  • 举报
回复
对这个问题不是很了解,我只是看见别人的例子。

因为如果用 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]可以开辟一个数组的内存空间,而[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]可以开辟一个字符串的空间,那么如果我想要字符串的数组怎么写呢?

至于是不是用MarshalAs,当然我想如果在C#里面除了unsafe就是这个了吧,当然在编译后他们是一样的,都是unsafe的。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部