偏移位置處包含一個對象字段

TypeLoadException: 未能從程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加載類型“ECS.GUI.Define.ArmgAimPos”,因為它在 4 偏移位置處包含一個對象字段,該字段已由一個非對象字段不正確地對齊或重疊

異常出現(xiàn)的關(guān)鍵字是:在4偏移位置處包含一個對象字段
通過查找對象,該對象為共用體


    // StructLayout使設(shè)計者可以控制類或結(jié)構(gòu)的數(shù)據(jù)字段的物理布局  
    // Explicit與FieldOffset一起可以控制每個數(shù)據(jù)成員的精確位置 
    [StructLayout(LayoutKind.Explicit)]
    public struct ArmgAimPos
    {
        [FieldOffset(0)] public BayType type;
        [FieldOffset(4)] public string ContainerID;
        [FieldOffset(8)] public string JobID; 

使用FieldOffset屬性實現(xiàn)共用體與強制類型轉(zhuǎn)換

使用字段開始的結(jié)構(gòu)中的偏移量初始化 FieldOffsetAttribute 類的新實例。

c# 
public FieldOffsetAttribute (int offset);

參數(shù)

offset Int32

從結(jié)構(gòu)開始處到字段開始處的偏移量(以字節(jié)為單位)。

可表示的概念為:原理實際上跟C++一樣,將一個int[] 型的變量指向與byte[]型變量相同的內(nèi)存區(qū)域,跟C++中將dat指向char數(shù)組的首地址是一樣的。同樣,這樣的結(jié)構(gòu)體功能與C++的共用體是一樣的,即一個結(jié)構(gòu)可以作為多種數(shù)據(jù)類型,而具體是什么類型視情況而定。

修改異常方法:

如提示標(biāo)題所示:4偏移位置,已經(jīng)有一個非對象字段了,所以,將偏移量向后移動即可解決

    // StructLayout使設(shè)計者可以控制類或結(jié)構(gòu)的數(shù)據(jù)字段的物理布局  
    // Explicit與FieldOffset一起可以控制每個數(shù)據(jù)成員的精確位置 
    [StructLayout(LayoutKind.Explicit)]
    public struct ArmgAimPos
    {
        [FieldOffset(0)] public BayType type;
        [FieldOffset(8)] public string ContainerID; 
        [FieldOffset(16)] public string JobID; 

[ FieldOffset(<font color=red> 8</font>)] public string ContainerID;
偏移量修改成了8 ,問題修復(fù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容