【解決方法】fieldoffset を含む構造体では typeloadException が発生します

プログラミングQA


VB
Public Structure Foo
<FieldOffset(0)>Public NameLength as Integer '4 Byte
<FieldOffset(4), MarshalAs(UnmanagedType.LPStr, SizeConst:=50)>Public Name As String 'variable name in MBCS
<FieldOffset(54)) Public Age As Integer
End Structure

FieldOffsets は問題ないと思います。 しかし、Visual Studio 2013 では、年齢のオフセットが無効であるというエラーが表示されます。

私が試したこと:

これを 52 に変更すると、エラーはなくなります。 しかし、理由はわかりません。

解決策 1

VS 2013 では確認できません。ライセンスが「古い」と表示され、新しいライセンスを取得できません。しかし、VS 2022 で試してみると、C# に変換されて正常に動作します。

C#
[StructLayout(LayoutKind.Explicit)]
public struct Foo
    {
    [FieldOffset(0)]
    public int NameLength; //4 Byte
    [FieldOffset(4), MarshalAs(UnmanagedType.LPStr, SizeConst = 50)] public string Name; //variable name in MBCS
    [FieldOffset(54)] public int Age;
    }

しかし、VB では、”>” が欠落しているというエラーが表示されます。

VB
<FieldOffset(54)) Public Age As Integer
                ^

これは、エラーが発生しているコードは、あなたが示したコードではないことを示しています。これはコンパイルできないため、「52」に変更したとしても、依然としてエラーが発生します。
それを修正すると、エラーはまったく表示されなくなります。

VB
Public Structure Foo
    <FieldOffset(0)> Public NameLength As Integer '4 Byte
    <FieldOffset(4), MarshalAs(UnmanagedType.LPStr, SizeConst:=50)> Public Name As String 'variable name in MBCS
    <FieldOffset(54)> Public Age As Integer
End Structure

コメント

タイトルとURLをコピーしました