Marshal.SizeOf(Type t) function
本文关键字:function Type SizeOf Marshal | 更新日期: 2023-09-27 18:24:48
我知道SizeOf()
应该用于与非托管代码交互,但我的问题是为什么System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.Char))
返回1
而不是2
?我假设C# char
应该等效于大小为2字节的非托管wchar_t
。这会引起问题吗?
来自Marshal.SizeOf:
对于字符类型,大小受应用于该类的
CharSet
值的影响。
根据CharSet枚举,默认值为CharSet.Ansi
:
尽管公共语言运行时的默认值是
Auto
,但语言可能会覆盖此默认值。例如,默认情况下,C#将所有方法和类型标记为Ansi
。
例如:
[StructLayout(LayoutKind.Sequential)]
struct A
{
char c;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct B
{
char c;
}
....
Console.WriteLine("{0} {1}", Marshal.SizeOf(typeof(A)), Marshal.SizeOf(typeof(B)));
输出是
1 2