导出的C函数中的bool大小vs struct vs .Net marshaling

时间:2012-10-31 16:00:13

标签: .net c size boolean

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

我有一个针对此本机DLL的.Net包装器。编组结构时,我为每个布尔字段UnmanagedType.U1指定了一切正常,一切都正确对齐。我只使用顺序布局,不是明确的,也不是任何偏移,也不是任何打包。

我的问题是,为什么布尔大小明显不一致?

1 个答案:

答案 0 :(得分:0)

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

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