2013-02-04 77 views
0

我想在C#中創建下面的結構,以便我可以與我的Lumenera CCD進行通信。下面的代碼取自C++頭文件。主要問題是匿名聯合和嵌套結構部分。任何幫助你將不勝感激。一個等效的例子會很棒。匿名聯盟和嵌套結構轉換爲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; 

回答

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; 
} 

我認爲它可能是像上面。我沒有嘗試過,但至少你有一個起點。

+0

不是真的,你得到了另一種方式.. gainRed需要佔據gainMag相同的內存。但是,是的,這是一個起點;) –

+0

非常感謝TYY爲您快速回復。我終於明白了轉換是如何完成的,因此我創造了一天。無法在LUCAM_SNAPSHOT結構上工作,但它在LUCAM_SNAPSHOT結構的另一個結構上工作(此處未顯示)。 – user2039560

+0

謝謝dema80對你的意見,你是對的,這是另一回事。只要我得到它的工作將發佈完整的結構,以便與Lumenera CCD有類似問題的任何人都可以得到它的工作。 – user2039560