問題タブ [structlayout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
72 参照

c# - C# クラスのネスト配列

数週間前に関連する質問を投稿しました: Marshal.Sizeof() 予期しない値を返す

背景として、サードパーティを雇って古い C++ プロジェクトを C# に変換しました。これは、イーサネット経由でメッセージを送受信する通信プロトコル アプリケーションです。すべてのメッセージには、定義された構造のシリアル化された表現であるペイロードが含まれています。

これらは C# クラスに変換されました。

私の問題は、LCT_T クラスの group_config_bytes 要素にあります。これはプログラム的には機能しますが、GROUP_T 構造体の元の配列は同等のバイト配列に失われました (元々、GROUP_T 配列は空で未使用でした)。次に、個々の GROUP_T オブジェクトの値を設定する必要があるため、ネストされたクラスの配列バージョンが必要です。

これはコンパイルされますが、Marshal.SizeOf(typeof(LCT_T)) が間違ったサイズを返しています (11 + (8 * 10) = 91 のはずです)。

この更新された LCT_T クラス定義がなければ、個々のグループの要素を設定する必要がある場合、group_config_bytesに値を直接突っ込む必要があります。

では、クラス内でネストされたクラスの配列を定義する正しい方法は何ですか?