【问题标题】:anonymous union and nested struct conversion to c#匿名联合和嵌套结构转换为 c#
【发布时间】:2013-02-04 12:17:15
【问题描述】:

我正在尝试在 C# 中创建以下结构,以便可以与我的 Lumenera CCD 进行通信。下面的代码取自 c++ 头文件。主要问题是匿名联合和嵌套结构部分。非常感谢您的任何帮助。一个等效的例子会很棒。

typedef struct {
        FLOAT exposure;        
        FLOAT gain;            
        union {
         struct {
          FLOAT gainRed;     
          FLOAT gainBlue;     
          FLOAT gainGrn1;     
          FLOAT gainGrn2;     
         };
         struct {
          FLOAT gainMag;     
          FLOAT gainCyan;     
          FLOAT gainYel1;     
          FLOAT gainYel2;    
         };
        };
      union
      {
           BOOL useStrobe;        
         ULONG strobeFlags;   
      };

} LUCAM_SNAPSHOT;

【问题讨论】:

    标签: c# struct unions


    【解决方案1】:
    [StructLayout(LayoutKind.Explicit)] 
    public struct LUCAM_SNAPSHOT
    {
        [FieldOffset(0)] public float exposure;
        [FieldOffset(4)] public float gain;
        [FieldOffset(8)] public float gainRed;
        [FieldOffset(8)] public float gainGrn1;
        [FieldOffset(8)] public float gainGrn2;
        [FieldOffset(12)] public float gainMag;
        [FieldOffset(12)] public float gainGrn1;
        [FieldOffset(12)] public float gainGrn2;
        [FieldOffset(12)] public float gainMag;
        [FieldOffset(16)] public byte useStrobe;
        [FieldOffset(16)] public int strobeFlags;
    }
    

    我认为它可能类似于上面的内容。我还没试过,但至少你有一个起点。

    【讨论】:

    • 不是真的,你是反过来的。gainRed 需要占用与 gainMag 相同的内存。但是,是的,这是一个起点;)
    • 非常感谢TYY的快速回复。你让我很开心,因为我终于明白了转换是如何完成的。无法让它在 LUCAM_SNAPSHOT 结构上工作,但它确实在作为 LUCAM_SNAPSHOT 结构一部分的不同结构上工作(此处未显示)。
    • 感谢 dema80 的输入,您是正确的,但恰恰相反。一旦我开始工作,我就会发布完整的结构,这样任何与 Lumenera CCD 有类似问题的人都可以让它正常工作。
    猜你喜欢
    • 1970-01-01
    • 2014-10-21
    • 2012-07-13
    • 2023-03-19
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    相关资源
    最近更新 更多