これが問題かどうかはわかりませんが、確かに好奇心です。32 ビット整数とブール値 (stdbool.h) を取る関数をエクスポートする C DLL があります。エクスポートされた関数 (stdcall) は、パラメーター リストが 8 バイト (4 バイト int、4 バイト bool) であることを示します。この C DLL には、ブール値を使用する構造体も含まれています。チェックsizeof(bool)
は 1 バイトのブール値を示します。
このネイティブ DLL の .Net ラッパーがあります。構造体をマーシャリングするとき、ブール値フィールド UnmanagedType.U1 ごとに指定しましたが、すべて正常に機能し、すべてが正しく配置されています。私はシーケンシャルレイアウトのみを使用し、明示的でも、オフセットも、パッキングも使用しませんでした。
私の質問は、ブール値のサイズに明らかな不一致があるのはなぜですか?