gpt4 book ai didi

.net - 导出的 C 函数、结构和 .Net 编码(marshal)处理中 bool 的大小

转载 作者:行者123 更新时间:2023-11-30 17:56:51 24 4
gpt4 key购买 nike

我不确定这是否是一个问题,但肯定是一个好奇心。我有一个 C DLL,它导出一个采用 32 位整数和 boolean 值的函数 (stdbool.h)。导出函数(stdcall)指示参数列表为8字节(4字节int,4字节bool)。该 C DLL 还包含一个使用 boolean 值的结构。检查 sizeof(bool) 表示 1 字节 boolean 值。

我有这个 native DLL 的 .Net 包装器。在编码(marshal)结构时,我为每个 boolean 字段指定了 UnmanagedType.U1,并且一切正常,一切都正确对齐。我只使用了顺序布局,没有显式的,也没有任何偏移或任何包装。

我的问题是,为什么 boolean 值大小存在明显差异?

最佳答案

C 中所有小于“int”的函数参数在调用时都会转换为“int”大小。这是因为每个参数都单独放置在堆栈上(在大多数体系结构中),因此它们被转换为堆栈单元大小,通常等于“int”的大小。

至于结构 - 没有任何转换。但我们不应该忘记结构的对齐。但这是另一个故事了。

关于.net - 导出的 C 函数、结构和 .Net 编码(marshal)处理中 bool 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13162021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com