[ad_1]
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
[ad_2]
コメント