4-오프셋 위치에 객체 필드가 포함되어 있기 때문에 비객체 필드가 올바르게 정렬되거나 중첩되어 있습니다.

1524 단어 .net-core

TypeLoadException: 프로그램 집합'ECS.GUI.Define,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'에서 형식'ECS.GUI.Define.ArmgAimPos'를 불러올 수 없습니다. 4번 오프셋 위치에 대상 필드가 포함되어 있기 때문에 이 필드는 대상이 아닌 글자로 정확하게 정렬되거나 중첩되지 않거나 겹쳐집니다


비정상적으로 나타나는 키워드는 4 오프셋 위치에 객체 필드를 포함하는 것입니다. 대상을 찾으면 공용체가 됩니다.

    // StructLayout   
    // Explicit FieldOffset  
    [StructLayout(LayoutKind.Explicit)]
    public struct ArmgAimPos
    {
        [FieldOffset(0)] public BayType type;
        [FieldOffset(4)] public string ContainerID;
        [FieldOffset(8)] public string JobID; 

FieldOffset 속성을 사용하여 공통 및 강제 유형 변환


필드에서 시작하는 구조의 오프셋을 사용하여 FieldOffsetAttribute 클래스의 새 인스턴스를 초기화합니다.
c# 
public FieldOffsetAttribute (int offset);

매개 변수
offset Int32
구조의 시작에서 필드의 시작까지의 오프셋(바이트)입니다.
표현 가능한 개념은 원리는 실제적으로 C++와 같이 int[]형의 변수를byte[]형 변수와 같은 메모리 영역으로 가리키고 C++에서dat가char수조의 첫 번째 주소를 가리키는 것과 같다.마찬가지로 이러한 구조체의 기능은 C++의 공용체와 같다. 즉, 하나의 구조는 여러 가지 데이터 유형으로 할 수 있고 구체적인 어떤 유형은 상황에 따라 결정된다.

예외 수정 방법:


프롬프트 제목과 같이: 4 오프셋 위치에 이미 개체가 아닌 필드가 있으므로 오프셋 수를 뒤로 이동하면 됩니다.
    // StructLayout   
    // Explicit FieldOffset  
    [StructLayout(LayoutKind.Explicit)]
    public struct ArmgAimPos
    {
        [FieldOffset(0)] public BayType type;
        [FieldOffset(8)] public string ContainerID; 
        [FieldOffset(16)] public string JobID; 

[ FieldOffset( 8)] public string ContainerID; 오프셋이 8로 수정됨, 문제 해결

좋은 웹페이지 즐겨찾기