紧急求助!!C#模拟C的柔性数组运行出错?怎么办

yaoike 2012-05-07 11:51:28
如题,我定义了这样一个结构体:

[StructLayout(LayoutKind.Sequential)]
public struct STAGINFOPARAM
{
byte metaData;

UInt16 uEPCLength;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
Byte[] ucaEPC;

UInt16 uTagCRC;
};

[StructLayout(LayoutKind.Sequential)]
public struct SREADINVENTORYTAGINFORSPPARAM
{
Byte ucStatus;

UInt16 uMetadataFlag;
Byte ucOption;
Byte ucTagCount;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0)] // 如这里改为 SizeConst = 1 运行就不会出错
STAGINFOPARAM[] tagInfo;
};


Int32 nSize2 = Marshal.SizeOf(typeof(SREADINVENTORYTAGINFORSPPARAM)); // 一运行到这里就出错?
MessageBox.Show(nSize2.ToString());


请指导一下,我要如何做呢?





...全文
123 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaoike 2012-05-07
  • 打赏
  • 举报
回复
请问还有其它的办法吗?
只在此山中 2012-05-07
  • 打赏
  • 举报
回复
出错就是表示0不允许.
以前我也遇到这个问题,不过用个笨办法处理了.就是结构里这个项个数有1,2,3,4,5种,然后就建了5个结构,

public struct SREADINVENTORYTAGINFORSPPARAM1
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]

public struct SREADINVENTORYTAGINFORSPPARAM2
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
...
yaoike 2012-05-07
  • 打赏
  • 举报
回复
如果是不知如何布局的话,那msdn上又说允许SizeConst 字段为0,这样的话,msdn上说不可以为零才解释得通吧?
请问你可以提供一种类似的解决机制或是建议吗?谢谢!
bdmh 2012-05-07
  • 打赏
  • 举报
回复
size=0,不知如何去布局 STAGINFOPARAM 结构体
yaoike 2012-05-07
  • 打赏
  • 举报
回复
我看到msdn上说:
对于 System.Runtime.InteropServices..::.UnmanagedType 枚举的 ByValArray 和 ByValTStr 成员,此字段(MarshalAsAttribute.SizeConst 字段)是必需的。因为元数据的压缩格式限制为 0x1FFFFFFF,所以 SizeConst 的允许值的范围为(>= 0 且 <= 0x1FFFFFFF)。

那是允许为0的啊?怎么运行时就会出错啊?

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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