c# - C# 结构的实际情况是什么?
问题描述
所以这是一个非常简单的问题
[StructLayout(LayoutKind.Sequential)]
public struct test
{
public uint a;
}
^ 这编组为 4
[StructLayout(LayoutKind.Sequential)]
public struct test
{
public IntPtr b;
}
^ 这编组为 8
[StructLayout(LayoutKind.Sequential)]
public struct test
{
public uint a;
public IntPtr b;
}
^ 这编组到 16 的大小
现在我不确定我的计算器是坏了还是什么,但我很确定 8+4 不是 16 ......有什么理由发生这种废话吗?
我需要它来生成正确的大小以用于 Windows API 调用
好吧,我正在尝试调用“NtQueryInformationThread”,但我的结构无效,因为这是结构:
[StructLayout(LayoutKind.Sequential)]
public struct TbiClientId
{
public IntPtr UniqueProcess;
public IntPtr UniqueThread;
}
[StructLayout(LayoutKind.Sequential)]
public struct ThreadBasicInformation
{
public uint ExitStatus;
public IntPtr TebBaseAdress;
public int ProcessId;
public TbiClientId ClientId;
public UIntPtr AffinityMask;
public uint Priority;
public uint BasePriority;
}
在 marshal.sizeof 下,它显示为 56,但如果我将 48 传递给 API,API 仅接受 48,它返回成功并填充结构....
解决方案
推荐阅读
- python - 如何使 y 轴上的数字显示以百万为单位的值,而不是 matplotlib 中的科学计数法?
- rust - 跟踪工厂及其产品之间所有权的惯用方式是什么?
- ubuntu - Ubuntu 为未连接的 WiFi 适配器应用网络计划
- hive - 如何将 Google Cloud Dataproc 上的 Hive 数据库连接到 Tableau Online,Tableau Bridge 是否有助于实时连接?
- git - 替代 git lfs
- javascript - NestJs 中的子路由
- bash - 使用 .tarignore 文件从 tar 中排除目录 (#2)
- elasticsearch - Elasticsearch 嵌套匹配查询不返回任何结果
- pytorch - 如何解决 RuntimeError: cuda 运行时错误 (59) : 设备端断言触发错误
- java - 在使用 Java 的 DynamoDB 扫描中使用包含过滤器 - android