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

紧急求助!!C#模拟C的柔性数组运行出错?怎么办
如题,我定义了这样一个结构体:
C# code

    [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());



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







------解决方案--------------------
size=0,不知如何去布局 STAGINFOPARAM 结构体
------解决方案--------------------
出错就是表示0不允许.
以前我也遇到这个问题,不过用个笨办法处理了.就是结构里这个项个数有1,2,3,4,5种,然后就建了5个结构,

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

public struct SREADINVENTORYTAGINFORSPPARAM2
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] 
...